참고자료: Node.js/Express 라우터에 req.params 값 넘기기
참고자료: Express 문서
참고자료에 명시한 두 자료를 통해 에러를 해결할 수 있었음을 밝힙니다! :)
DB 상에 특정 장소를 저장하고, 해당 장소에 적힌 글(해당 프로젝트의 Drop)을 조회하는 api의 router를 추가하는 작업을 진행했다.
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를 추가함!
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);
까지 해 보니, placePk
가 dropRouter
가 아니라
baseUrl
쪽에 담겨 있어서 pk값을 정상적으로 못 가져오는 문제인 듯했다.
router 중간에서 params를 옮기는 함수를 추가하는 방식으로 삽질(?)을 좀 하다가..
참고자료를 보고 깔끔히 해결했다! ㅠㅠ
const router = require('express').Router({mergeParams:true});
자식 라우터인 dropRouter.js
에서 Router
에
mergeParams:true
속성을 주면 부모 라우터의 params가 자식 라우터에도 받아진다!
참고자료에 이 내용 정리해 주신 분 정말 감사합니다..ㅠㅠ