[Node.js/Express] 라우터에 req.params 값 넘기기

유진·2021년 1월 18일
0

1. 문제

라우터로 별개의 파일에서 라우팅을 하는데, 상위 라우터의 파라미터가 필요한 경우가 있다.

가령 이런 경우다.

// app.js

const app = express();
const userRouter = require('/routes/user');

// 부모 라우터
app.use('/:userId', userRouter);
// routes/user.js

const express = require('express');
const router = express.Router();

// 자식 라우터
router.get('/', (req, res, next) => {
    console.log(req.params);  // output: {}
})

기본적으로 express에서는 라우터의 파라미터를 req.params에 저장한다. 그런데 하위 라우터에는 이 req.params가 넘어가지 않는다.

그래서 위의 예제에서는 req.params를 콘솔에 찍었을 때 아무것도 안나온다. 자식 라우터의 req에는 상위 라우터의 req.params 값인 userId가 없기 때문이다.

2. 해결

부모 라우터에서 자식 라우터에게 req.params를 넘겨주기 위해서는 express.Router()의 인자로 {mergeParams: true} 옵션을 추가해주어야 한다.

// routes/user.js

const express = require('express');
const router = express.Router({mergeParams: true});

// 자식 라우터
router.get('/', (req, res, next) => {
    console.log(req.params);  // output: {user_id: ㅇㅇ}
})

express.Router()mergeParams 옵션은 부모 라우터의 req.params를 자식에게 넘겨준다. 만약 부모와 자식의 params가 겹치는 경우, 자식 라우터의 params가 우선된다. 기본값은 false이다.

3. 참고자료

Express.js 문서

profile
제가 또 기가막힌 한 줌의 트러플 소금 같은 존재그등요

2개의 댓글

comment-user-thumbnail
2021년 6월 1일

안녕하세요 현재 node.js를 공부하다가 사이트를 발견하게 되었는데 내용이 정말 잘 정리되어 있어 도움이 많이 되었습니다. 혹시 내용을 인용하여도 괜찮을까요?? 출처는 명시하겠습니다. 혹시 불편하시다면 인용하지 않겠습니다.!

1개의 답글