Express) 기본적인 MVC 패턴

알파로그·2023년 12월 14일
0

Node.js

목록 보기
6/25

✏️ Node.js 기반 Express 의 MVC 패턴

  • MVC 는 Model View Controller 의 약자로 서버 개발에 대한 디자인 패턴을 의미한다.
  • RestAPI 서버를 구현할 때도 MVC 패턴을 사용하지만 사실상 View 는 사용되지 않는다는 특징이 있다.

✏️ 적용하기 1. commen js 방식

📍 controller.js

  • 실제로 api 를 구현하는 모듈이다.
exports.mainView = function (req, res) {
    console.log("Controller 실행")
    res.send("Hello World");
};

📍 index.js

  • controller 에서 구현한 api 로 요청을 라우팅하는 모듈이다.
    • 이 모듈에서 제공중인 api 를 한눈에 볼 수 있다.
const router = require("express").Router();
const controller = require("./controller");

router.get("/main", controller.mainView);

module.exports = router;

📍 app.js

  • express 서버의 본체로 핵심적인 역할을 담당하고, 여러 미들웨어를 관리한다.
    • 이제 서버를 실행하면 8080 포트로 api 를 호출할 수 있다.
const express = require("express"),
    app = express(),
    http = require('http').createServer(app),
    port = 8080,
    routes = require("./routes/index");

app.use(routes);

http.listen(port);
  • cors 를 비롯한 간단한 모듈들을 추가해줬다.
const express = require("express"),
    app = express(),
    http = require('http').createServer(app),
    port = 8080,
    cors = require('cors'),
    starter = require('./lib/starter'),
    routes = require("./routes/index");

starter.start('HELLO   EXPRESS');

app.use(routes, cors());

http.listen(port);

✏️ 적용하기 2. ESM 방식

📍 controller.js

export function main (req, res) {
    res.render('main');
}

📍 route.js

import express from 'express';
import * as controller from './controller.js';

const router = express.Router();

router.get("/", controller.main);

export { router as routes };

📍 app.js

import {routes} from './routes/route.js';
import {start} from './lib/figlet.js';
import express from 'express';
import path from 'path';

const app = express(),
    __dirname = path.resolve(),
    port = 3000;

//-- view setting --//
app.set('view engine', 'pug')
app.set('views', 'my_app/views')

//-- application setting --//
app.use(routes);

app.listen(port, () => {
    start('EXPRESS START')
    console.log('Server is running on', port, 'port');
});
profile
잘못된 내용 PR 환영

0개의 댓글