[수정된 코드]
- TDD user API server settings : https://github.com/imjinbro/tddUserAPI
(필요하다면 fork 후 remote로 가져오기)
[라우트, 컨트롤러 코드 각각 분할하기]
- 라우트 : 라우팅을 위한 전용 Router 클래스 사용해서 app.js에서 라우팅 코드 간결하게 만들기
- 컨트롤러 : api 동작(콜백함수) 부분만 모듈화시키기
1) 디렉토리 분할하기
- 총괄디렉토리(api) > 유저 api 디렉토리(user) 만들기 : mkdir 사용해서 api, user 생성
2) user 디렉토리에 소스 파일 분할하기
- index.js : 라우팅
const express = require('express');
const router = express.Router();
const controller = require('./user.ctrl');
/* user 라우팅 로직 */
router.get('/', controller.index);
router.get('/:id', controller.read);
router.post('/', controller.create);
router.put('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;
- user.ctrl.js : api 동작 코드
/* api 로직 */
let users = [
{id: 1, name: 'jinbro'},
{id: 2, name: 'jinhyung'},
{id: 3, name: 'park'}
];
let index = function(req, res){
/* req.query.limit = req.query.limit || 10 - 요로코롬 쓸 수도 있네? */
if(!req.query.limit){
res.json(users);
} else {
const limit = parseInt(req.query.limit, 10);
if(isNaN(limit)){
return res.status(400).end();
}
res.json(users.slice(0, limit));
}
};
let read = function(req, res){
const id = parseInt(req.params.id, 10);
if(isNaN(id)){
return res.status(400).end();
}
const user = users.filter((user) => {
return user.id === id;
})[0];
if(!user){
return res.status(404).end();
}
res.json(user);
};
//.... 이하 생략
module.exports = {
index: index,
read: read,
create: create,
update: update,
destroy: destroy
};
3) 프로젝트 루트 디렉토리(/)에 있는 app.js에서 user 로드하기
- index.js 파일만 로드하면 의존 모듈이 따라옴 : user.ctrl.js 모듈이 로드 되어있기 때문
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const port = 3000;
/* use router class */
const user = require('./api/user/index.js');
/* body-parser middleware for json */
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
/* /users 요청을 모두 /user/index.js로 */
app.use('/users', user);
app.listen(port, function(){
console.log("server is running");
});
module.exports = app; /* use at app.spec.js */
[정리]
- 테스트 코드가 중요함 : 리팩토링하고나서 제대로 동작하는지 확인을 바로바로 할 수 있으니깐, 어디서 막히는지 바로바로 알 수 있음
- 리팩토링할 때는 1개만 작업해두고, 테스트 코드가 정상동작하는지 테스트 한 후 정상동작이라면 그때 올 리펙토링(같은 작업 범위 내)
- 모듈화를 잘해서 코드를 깔끔하게 만들자
[참고자료]
- express, express.Router() : http://expressjs.com/ko/guide/routing.html
- inflearn, 테스트주도개발(TDD)로 만드는 NodeJS API 서버 : https://goo.gl/3fEGPp
'nodejs' 카테고리의 다른 글
[node.js] node.js에서 데이터 수집하기 (0) | 2017.07.02 |
---|---|
[node.js] 외부DB 연동 전 준비하기 #1 - RHEL + mysql (0) | 2017.06.26 |
[node.js] express - session : 로그인 (0) | 2017.06.19 |
[node.js] express - HTTP 쿠키 사용하기 (0) | 2017.06.18 |
[node.js] AJAX API 서버 만들기 (0) | 2017.06.17 |
댓글