Node.js/Node.js Doc

[Node.js] Basic routing

장일규 2022. 5. 8. 19:43

routing은 URI또는 path 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말한다.

각 route는 하나 이상의 핸들러 함수를 가질 수 있고,

app.METHOD(PATH, HANDLER)
  • app은 express의 인스턴스이다.
  • METHOD는 HTTP 요청 메소드이다.
  • PATH는 서버에서의 경로이다.
  • HANDLER는 라우트가 일치할 때 실행되는 함수이다.

METHOD 종류

  • app.get : 가져오다
  • app.post : 생성하다
  • app.put: 전체 수정
  • app.delete: 제거
  • app.patch: 부분 수정 (수정작업은 대부분 patch로 활용하게 됨)
  • app.options: 찔러보기
  • app.head: 헤더만 불러옴, 거의 안씀.

app.js

const express = require('express')
const app = express()
const port = 3000

const { StatusCodes } = require('http-status-codes');
const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.get('/', (req, res) => {
  res.send('Hello World, I\'m Root');
})

app.get('/user', (req, res) => {
    res.status(StatusCodes.OK).json({
        message: "getUser"
    });
});

app.post('/user', (req, res) => {
    res.status(StatusCodes.CREATED).json({
        message: "create"
    });
    console.log(req.body);
});

app.get('users', (req, res) => {
    res.status(StatusCodes.OK).json({
        message: "get users"
    });
});

app.patch('/users', (req, res) => {
    res.status(StatusCodes.OK).json({
        message: "updated user"
    });
});

app.delete('/users', (req, res) => {
    res.status(StatusCodes.delete).json({
        message: "delete user"
    });
});

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
});

위와 같이 endpoint에 대한 Handler를 작성한 후 서버를 켜서 가고자 하는 path로 이동하면 된다.

user create 예시

사용자가 서버로 보내는 user정보

Body에 json으로 생성하게 될 user의 정보인 name과 age정보를 서버로 넘기는 데이터이다.

app.post('/user', (req, res) => {
    res.status(StatusCodes.CREATED).json({
        message: "create"
    });
    console.log(req.body);
});

post방식에 /user endpoint로 갈 경우, Handler가 실행된다.

클라이언트에게 전달되는 응답 메시지
console.log에 찍힌 req.body

문제점

이렇게 app.js에 routing관련 로직을 작성하여도 실행에는 문제는 없지만, 프로젝트가 더 커지고 복잡해지면 app.js파일에 역할이 너무 많아진다.

서버도 띄워야하고.. 미들웨어도 실행해야하고.. 사용자 요청이 오면 그에 맞는 핸들러도 실행해야하고..

다음 시간에는 router를 분리해보고자 한다.