[nodejs] Routes-Models-Controllers 구조
✏️ sprint를 진행하면서 server 프로젝트의 디렉토리 구조를 보면서 왜 이렇게 잘게(?) 나누어 놓았는지 의문이 들었다. 구글링 해보니 이런 스타일로 구조화하여 진행하는 것에 대한 많은 포스팅들이 있었다. 구조를 이해하고 보니 sprint의 개념도 더 잘 이해되는 듯 하다. 정리해두고 프로젝트를 진행할 때 적극적으로 활용해야겠다.
Routes-Models-Controllers(-Services) 구조
- nodejs로 서버를 구축할 때, 향후 유지보수를 위해 아래와 같이 기능별로 구조화 해두면 좋다.
경로(Routes)
API 경로를 해당하는 컨트롤러에 매핑
// routes/index.js
const express = require('express');
const router = express.Router();
const itemsRouter = require('./items');
const usersRouter = require('./users');
router.use('/items', itemsRouter);
router.use('/users', usersRouter);
module.exports = router;
// routes/items.js
const router = require('express').Router();
const controller = require('./../controllers');
router.get('/', controller.items.get); // API 경로에 해당하는 컨트롤러를 연결
module.exports = router;
모델(Models)
모델의 스키마 정의, DB에 접근하는 로직 처리
const db = require('../db'); // DB 모듈 require
module.exports = {
items: {
get: (callback) => {
const queryString = `SELECT * FROM items`;
db.query(queryString, (error, result) => {
callback(error, result);
});
},
}
}
Models에서 스키마 정의만 해주고, Services 모듈을 추가하여 Services에서 DB 쿼리를 처리해줄 수도 있다.
컨트롤러(Controllers)
요청 매개변수 확인, 쿼리, 적절한 상태 코드 및 응답 보내기 등의 비즈니스 로직 처리
const models = require('../models'); // models 모듈 require
module.exports = {
items: {
get: (req, res) => {
models.items.get((error, result) => {
if (error) {
res.status(500).send('Internal Server Error');
} else {
res.status(200).json(result);
}
});
},
}
}
Author And Source
이 문제에 관하여([nodejs] Routes-Models-Controllers 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yooni/nodejs-Routes-Models-Controllers-구조저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)