CRUD 구조
자바스프링의 MVC 구조를 모방
Model : 테이블 정의 파일
Controller : 라우터 파일
Service : 비즈니스 로직 파일
DAO (data acess object) : 데이터 액세스 파일(쿼리를 날림)
프로세스 흐름
Controller -> Service -> DAO 순
=> 강사님이 짜신 구조로 CRUD 구조는 만드는 사람마다 각자 다 다름
코딩 순서
Model -> DAO -> Service -> Router 순
DAO 파일 만들기
DB처리에 관련된 사항만 넣는다(sequelize 함수 위주)
departmentDao.js
C:\Workspace\nodeproj\dao\departmentDao.js
const { Department } = require('../models/index');
// index.js에서 가져옴
const dao = {
insert(params) {
// 동기식으로 처리해야함
return new Promise((resolve, reject) => {
Department.create(params).then((inserted) => {
resolve(inserted);
}).catch((err) => {
reject(err);
});
});
},
};
module.exports = dao;
Service 파일 만들기
모든 비즈니스 로직을 넣도록 하고, 순차 진행일 경우 async/await를 사용해야 한다.
departmentService.js
C:\Workspace\nodeproj\service\departmentService.js
const logger = require('../lib/logger');
const departmentDao = require('../dao/departmentDao');
// DAO 파일 호출(다른 DAO 파일도 불러올 수 있기 때문에 이름 설정)
const service = {
// department 입력
async reg(params) {
let inserted = null;
try {
inserted = await departmentDao.insert(params); // insert 될 때까지 기다림
logger.debug(`(departmentService.reg) ${JSON.stringify(inserted)}`);
} catch (err) { // 반드시 catch에 error를 넣어 debug와 구분해 출력해야한다.
logger.error(`(departmentService.reg) ${err.toString()}`);
return new Promise((resolve, reject) => {
reject(err);
});
}
// 결과값 리턴
return new Promise((resolve) => {
resolve(inserted);
});
},
};
module.exports = service;
service는 return값이 있어야 한다.
비즈니스 로직은 리턴 위에 들어가면 된다.(여기엔 하나도 없다)
Router 파일 만들기
사용자의 request 요청을 최초로 받고 response를 최종 리턴해주는 부분
입력 파라미터를 체크하고 응답을 보내준다.
department.js
C:\Workspace\nodeproj\routes\department.js
const express = require('express');
const router = express.Router();
const logger = require('../lib/logger');
const departmentService = require('../service/departmentService');
// serivce 파일을 넣어준다
// 부서 등록
// '/' = '(/department)/' (라우터 등록 index)
router.post('/', async (req, res) => {
try {
const params = {
name: req.body.name,
code: req.body.code,
description: req.body.description,
};
logger.info(`(department.req.params) ${JSON.stringify(params)}`);
// 최종 응답
res.status(200).json({ result: 'success ' });
} catch (err) {
res.status(500).json({ err: err.toString() });
}
});
module.exports = router;
req.body : post 방식으로 보내면 body로 들어간다.
req.query
req.params
router 등록
const express = require('express');
const logger = require('../lib/logger');
const departmentRouter = require('./department'); // 추가
// ...
// department
router.use('/departments', departmentRouter);
module.exports = router;
postman 실행
데이터 보내보기
'공부 > Boot camp' 카테고리의 다른 글
TIL_220127_토큰 관리 (0) | 2022.01.27 |
---|---|
TIL_220126_Backend_CRUD (0) | 2022.01.26 |
TIL_220124_Backend (0) | 2022.01.25 |
TIL_220121_IOT (0) | 2022.01.21 |
TIL_220120_IOT (0) | 2022.01.20 |