#부록. Router 추가와 mergeparams

toto9602·2022년 2월 24일
0

첫 Express 프로젝트

목록 보기
5/7

참고자료: Node.js/Express 라우터에 req.params 값 넘기기
참고자료: Express 문서

참고자료에 명시한 두 자료를 통해 에러를 해결할 수 있었음을 밝힙니다! :)

DB 상에 특정 장소를 저장하고, 해당 장소에 적힌 글(해당 프로젝트의 Drop)을 조회하는 api의 router를 추가하는 작업을 진행했다.

routes/index.js

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

const drop = require("./dropRouter");
const auth = require("./authRouter");
const place = require('./placeRouter');

router.use("/", place);
router.use("/auth", auth);
router.use("/:placePk/drops", drop);

module.exports = router;

기존 index.js에서 place쪽을 추가하고, drop(해당 프로젝트의 '글' 개념)으로 이어지는 router들에 장소 개념을 추가해 주기 위해 placePk를 추가함!

routes/dropRouter.js

const router = require('express').Router();
const passport = require('passport');
const controller = require('../controllers/dropController');
const jwtpassportAuth = passport.authenticate('jwtAccess', {session:false});

router.post('/', jwtpassportAuth, controller.newDrop);
router.get('/', jwtpassportAuth, controller.getDrops);
router.put('/:dropPk', jwtpassportAuth, controller.updateDrop);
router.delete('/:dropPk', jwtpassportAuth, controller.deleteDrop);

module.exports = router;

그리고 dropRouter.js를 유지한 채로 서버 실행 후 api에 요청을 보내니..

Error: WHERE parameter "placePk" has invalid "undefined" value

위와 같은 에러가 발생했다.

console.log(req.params);

를 입력했을 때 아무것도 뜨지 않아서,

console.log(req);

까지 해 보니, placePkdropRouter가 아니라

baseUrl 쪽에 담겨 있어서 pk값을 정상적으로 못 가져오는 문제인 듯했다.


router 중간에서 params를 옮기는 함수를 추가하는 방식으로 삽질(?)을 좀 하다가..
참고자료를 보고 깔끔히 해결했다! ㅠㅠ

routes/dropRouter.js

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

자식 라우터인 dropRouter.js에서 Router
mergeParams:true 속성을 주면 부모 라우터의 params가 자식 라우터에도 받아진다!


코드가 지저분해지게 중간에 함수를 넣거나 하지 않고 깔끔히 해결해서 기분 좋다 :)

참고자료에 이 내용 정리해 주신 분 정말 감사합니다..ㅠㅠ

profile
주니어 백엔드 개발자입니다! 조용한 시간에 읽고 쓰는 것을 좋아합니다 :)

0개의 댓글