애플리케이션이 점점 커질수록 server.js 파일에 api들이 많아져서 복잡해지게 됩니다.
이럴 때 router를 이용하면 이 부분을 정리해줄 수 있습니다.
클라이언트의 요청 경로(path)에 따라 이 요청을 처리할 수 있는 곳으로 기능을 전달해주는 것이 라우터 입니다.
Routing 을 위한 폴더 및 파일 생성
// 1. express.Router 클래스를 이용해서 router 객체 생성
const usersRouter = express.Router();
// 2. router 객체에 middleware 함수 등록
usersRouter.get("/users", usersController.getUsers);
usersRouter.get("/user/:userId", usersController.getUser);
usersRouter.post("/users", usersController.postUser);
// 3. server.js 파일에 경로에 따른 router 등록하기
app.use("/users", usersRouter);
// routes/users.router.js
const router = require("express").Router();
const usersController = require("../controllers/users.controller");
router.get("/", usersController.getUsers);
router.get("/:userId", usersController.getUser);
router.post("/", usersController.postUser);
module.exports = router;
// server.js
const usersRouter = require("./routes/users.router");
app.use("/users", usersRouter);
// routes/posts.router.js
const router = require("express").Router();
const postsController = require("../controllers/posts.controller");
router.get("/", postsController.getPost);
module.exports = router;
// server.js
const usersRouter = require("./routes/users.router");
const postsRouter = require("./routes/posts.router");
app.use("/users", usersRouter);
app.use("/posts", postsRouter);
https://expressjs.com/en/5x/api.html#req.baseUrl
현재 요청에 대한 로그를 보면 이런 식으로 나오는 것을 볼 수 있습니다.
app.use((req, res, next) => {
const start = Date.now();
console.log(`${req.method} ${req.url}`);
next();
const diffTime = Date.now() - start;
console.log(`${req.method} ${req.baseUrl}${req.url} ${diffTime}ms`);
// 메인 task를 처리한 뒤, next() 뒷 부분을 호출합니다.
});