Home Express에서 Router를 이용해 코드 분리하기
Post
Cancel

Express에서 Router를 이용해 코드 분리하기

모든 코드를 app.js에 작성할 수 없기 때문에 Router를 이용해 코드를 모듈로 분리해 효율적으로 관리해보겠습니다.

Router

Express로 서버 개발을 진행하면서, 기능이 점점 늘어남에 따라 모든 코드를 app.js에만 작성하기에는 불편했습니다.

한 파일의 코드가 길어지면서 가독성이 떨어지면서 관리가 힘들어졌습니다.

그래서 Express에서는 어떻게 파일을 나눌 수 없나 찾아보다가, Router를 이용하면 목적을 달성할 수 있다는 것을 알게 되었습니다.

1
2
3
4
5
6
// app.js
app.get("/api/board", (req, res) => {});
app.post("/api/board", (req, res) => {});
app.get("/api/board/:boardId", (req, res) => {});
app.update("/api/board/:boardId", (req, res) => {});
app.delete("/api/board/:boardId", (req, res) => {});

위 예시를 이용하겠습니다.

express.Router

Express에서는 express.Router를 이용해 라우터를 다른 모듈로 분리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// board-router.mjs
import { Router } from "express";

const router = Router();

router.use((req, res, next) => {
  console.log("before /api/board");
  return next();
});

router.get("", (req, res) => {});
router.post("", (req, res) => {});
router.get("/:boardId", (req, res) => {});
router.put("/:boardId", (req, res) => {});
router.delete("/:boardId", (req, res) => {});

export default router;

express.Router 클래스를 이용해 마운트 가능한 모듈러식 라우트 핸들러를 생성합니다.

Router 인스턴스는 완전한 미들웨어 및 라우팅 시스템이 됩니다.

router.use()를 이용해 해당 라우터의 고유한 미들웨어를 사용합니다.

router.메서드()를 이용해 app.메서드() 처럼 사용할 수 있습니다.

앞의 URL은 필요한 만큼 생략합니다. ('/api/board/:boardId' -> '/:boardId')

1
2
3
4
5
6
7
// app.js
import express from "express";
import boardRouter from "./routes/board-router";

app.use("/api/board", boardRouter);

app.listen(PORT, () => console.log(`Listening on port ${PORT}`));

이제 위 코드처럼 app.js에서 해당 라우터 모듈을 불러와 app.use()에 연결합니다.

app.route()

1
2
3
4
5
6
app
  .route("/api/board")
  .get((req, res) => {})
  .post((req, res) => {})
  .put((req, res) => {})
  .delete((req, res) => {});

위 코드처럼 app.route()를 이용해 그냥 app.메서드()를 사용하는 것보다 코드를 좀 더 줄일 수도 있습니다.

참고

Routing

[node.js] 라우팅 설정 및 Controller분리

This post is licensed under CC BY 4.0 by the author.