본문 바로가기
개발/Node JS

Node JS - Express 중첩 라우팅 설정하기 (Setting Nested Routing)

by 피로물든딸기 2023. 12. 23.
반응형

Node JS 전체 링크

 

Express에서 중첩 라우팅을 설정해보자.

 

server.js에 router_test를 추가한다.

const express = require("express");
const app = express();
const cors = require("cors");

app.use(cors());

const router_test = require("./routes/router_test");

app.use("/router_test", router_test);

app.listen(3002, () => {
  console.log("Node.js Server is running on port 3002...");
});

 

router_test.js는 다음과 같다.

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

router.get("/", (req, res) => {
  res.send({ result: true });
});

router.get("/test1", (req, res) => {
  res.send({ result_test1: true });
});

router.get("/test1/:id", (req, res) => {
  let userID = req.params.id;
  res.send({ test1_id: userID });
});

router.get("/test1/:id/:name", (req, res) => {
  let userID = req.params.id;
  let userName = req.params.name;
  res.send({ test1_id: userID, test1_name: userName });
});

router.get("/test1/sub1", (req, res) => {
  res.send({ result_test1_sub1: true });
});

router.get("/test1/sub1/:id", (req, res) => {
  let userID = req.params.id;
  res.send({ sub1_id: userID });
});

router.get("/test1/sub1/:id/:name", (req, res) => {
  let userID = req.params.id;
  let userName = req.params.name;
  res.send({ sub1_id: userID, sub1_name: userName });
});

module.exports = router;

 

router_test의 결과는 다음과 같다.

 

router_test/test1의 결과는 다음과 같다.

 

router_test/test1에 ID를 parameter를 추가한 경우는 다음과 같다.

 

router_test/test1에 ID와 Name을 parameter를 추가한 경우는 다음과 같다.

 

router_test/test1/sub1의 결과는 다음과 같다.

sub1을 실행하였지만, test1의 ID parameter를 sub1으로 판단하고 있다.

 

Express는 라우터를 순서대로 확인하기 때문에 정상 동작하려면 아래 라우터의 순서를 바꿔야 한다.

router.get("/test1/:id", (req, res) => {
  let userID = req.params.id;
  res.send({ test1_id: userID });
});

...

router.get("/test1/sub1", (req, res) => {
  res.send({ result_test1_sub1: true });
});

 

/test1/sub1이 위로 가도록 코드를 수정하면 정상 동작하는 것을 알 수 있다.

 

즉, 라우터의 순서를 아래와 같이 수정해야 한다.

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

router.get("/", (req, res) => {
  res.send({ result: true });
});

router.get("/test1", (req, res) => {
  res.send({ result_test1: true });
});

router.get("/test1/sub1", (req, res) => {
  res.send({ result_test1_sub1: true });
});

router.get("/test1/sub1/:id", (req, res) => {
  let userID = req.params.id;
  res.send({ sub1_id: userID });
});

router.get("/test1/sub1/:id/:name", (req, res) => {
  let userID = req.params.id;
  let userName = req.params.name;
  res.send({ sub1_id: userID, sub1_name: userName });
});

router.get("/test1/:id", (req, res) => {
  let userID = req.params.id;
  res.send({ test1_id: userID });
});

router.get("/test1/:id/:name", (req, res) => {
  let userID = req.params.id;
  let userName = req.params.name;
  res.send({ test1_id: userID, test1_name: userName });
});

module.exports = router;

 

router_test/test1/sub1에 ID를 추가해보자.

 

Name까지 추가해도 정상 동작하는 것을 알 수 있다.

 

반응형

댓글