[node] express + OOP

Yeongsan Son·2021년 7월 22일
0
post-custom-banner

express 서버에 OOP를 적용해 보자.

  • 먼저 app과 server로 파일을 나누어서
    • app.js 파일은 온전히 application 객체를 만드는데 집중하고
    • server.js 파일은 서버의 실행만 담당하도록 코드를 작성한다.
// app.js
const express = require("express");
const logger = require("morgan");
const cookieParser = require("cookie-parser");

const db = require("./models");

class App {
  constructor() {
    this.app = express();
    this.dbConnection();
    this.setMiddleWare();
    this.getRouting();
  }

  dbConnection() {
    db.sequelize
      .authenticate()
      .then(() => {
        console.log("서버와 연결 성공");
        return db.sequelize.sync();
      })
      .then(() => {
        console.log("Sync 완료");
      })
      .catch((err) => {
        console.error("DB와 연결할 수 없음:", err);
      });
  }

  setMiddleWare() {
    this.app.use(logger("dev"));
    this.app.use(express.json()); 
    this.app.use(express.urlencoded({ extended : true})); 
    this.app.use(cookieParser());
  }

  getRouting() {
    this.app.use(require("./controllers"));
  }
}

module.exports = new App().app;

App.js에서 사용할 모듈들을 require하고

class를 사용해 application 객체를 생성할 준비를 한다.

construct 생성자 함수에 서버 실행 시 사용할 메서드와 application을 초기화한다.

  • dbConnection: 서버와 데이터베이스의 연결을 담당하는 메서드
  • setMiddleware: application에서 사용할 미들웨어들을 정의하는 메서드
    • 앞으로 사용할 미들웨어 모듈은 이 메서드에서 등록해줘야 함
  • getRouting: 분기 처리된 라우팅 미들웨어를 가져오는 메서드

마지막으로 클래스로 정의한 객체를 모듈화 해준다.

함수는 호이스팅이 발생하기 때문에 함수를 호출하는 코드가 함수 선언 코드보다 먼저 나와도 괜찮지만, 클래스로 객체를 생성할 때는 호이스팅이 발생하지 않기 때문에 항상 클래스 선언이 먼저 되어야 한다.

// server.js
const app = require("./app.js");
const port = 3000;

app.listen(port, function () {
  console.log("Express listening on port", port);
});

server.js 파일은 위 코드와 같이 application 서버를 실행하는데만 집중한다.

profile
매몰되지 않는 개발자가 되자
post-custom-banner

0개의 댓글