February 13, 2021

express의 Router 객체


express 패키지 없이 라우터를 만들 때에는 요청 메소드와 주소별로 분기 처리를 하여 코드가 복잡하고 가독성이 좋지 않다. express에서는 Router 객체를 이용하여 라우팅을 깔끔하게 관리할 수 있다.

라우팅 분리하기

const express = require('express');

const router = express.Router();

router.get('/', (req, res) => {
	res.send('Hello, Express');
});

module.exports = router;
const express = require('express');

const router = express.Router();

router.get('/', (req, res) => {
	res.send('Hello, User');
});

module.exports = router;
...

const indexRouter = require('./');
const userRouter = require('./routes/user');

app.use('/', indexRouter);
app.use('/user', userRouter);

...

다음 라우터로 넘어가기

next('route');

라우터에 연결된 나머지 미들웨어들을 건너뛴다.

라우터 주소 특수 패턴 처리하기

router.get('/user/:id', (req, res) => {
  console.log(req.params, req.query);
});

/user/123 등의 처리도 라우터가 처리하며, 이 값은 req.params에 존재한다. 또, 주소에 쿼리스트링을 사용하면 req.query 객체 내에 데이터가 존재한다.

이 패턴을 사용할 때에는 일반 라우터보다 뒤에 존재해야한다. /user/like의 라우터가 존재하고 GET 요청이 들어왔을 때, /user/like GET 라우터가 위 라우터보다 뒤에 존재한다면 위 라우터가 라우팅한다.

라우터를 더 가독성 좋게!

router.route('/abc')
  .get((req, res) => {
     res.send('GET /abc');
  })
  .post((req, res) => {
     res.send('POST /abc');
  });