38일차

JiHun·2023년 6월 5일

부트캠프

목록 보기
34/56

express 구조

express는 app.js 파일 안에 모든 것을 적을 수 있다.
하지만 이것은 단점이 된다.
구조 파악도 어렵고 복잡하기 때문에 유지 보수도 어렵다.

그래서 express.Router()라는 함수를 이용해서 라우터끼리만 표지판처럼 모아놓고
그 표지판으로 향하는 데이터를 따로 관리하는 Controller 폴더로 별도로 만들어서 메서드 별로 관리 한다. 즉, Router, Controller를 분리해서 관리하는 것이 복잡하지 않다.

express.Router()

먼저, app.js에서는 미들웨어를 이용해 특정 라우터를 실행하게 할 수 있다.

// app.js

app.use("/flight", flightRouter);
app.use("/book", bookRouter);
app.use("/airport", airportRouter);

이 라우터로 요청이 들어올 시, 뒤에 있는 함수가 실행된다. 여기서는 파일 이름으로 작성되어있다. 이것은 모듈로 마운팅이 될 것이다.

//flightRouter.js
const { findAll, findById, update } = require('../controller/flightController');
const express = require('express');
const router = express.Router();

router.get('/', findAll);

router.get('/:uuid', findById);

router.put('/:uuid', update);

module.exports = router;

express.Router 클래스를 이용해서 모듈식 마운팅 가능한 핸들러를 작성한다.
인스턴스 router로 경로를 정의하고 라우터 모듈을 마운트한다.

Controller

위 예시를 이어보자면,
두 번째 인자로 각 라우터에 해당하는 함수들이 있는데 이것은 파일형 모듈에서 가져온 메서드들이다.
이러한 메서드들도 router 파일 안에 모두 넣게 되면 복잡하기 때문에, Controller의 기능을 하는 메서드들만 모아놓는다.

const fs = require("fs");

module.exports = {
  findAll: (req, res) => {
    ...
  },
  findById: (req, res) => {
    ...
  },
  update: (req, res) => {
    ...
  },
};

✏️ module.exports

Node.js에서 각 파일은 모듈로 간주되며, 'module' 객체는 현재 모듈을 나타내는 특수한 객체다.
'module' 객체의 'exports' 속성은 모듈에서 내보낼 대상을 정의하고, 다른 모듈에서 사용할 수 있도록 한다.

'module.exports'에 값을 할당함으로써 해당 값을 모듈의 공개 인터페이스로 노출시킬 수 있다. 다른 모듈은 'require' 함수를 사용하여 모듈을 가져와 내보낸 값을 액세스 할 수 있다.

profile
안녕하세요. 프론트엔드 개발자 송지훈입니다.

0개의 댓글