'제대로 배우는 NodeJS p170. ' 에 관한 내용이다.
처음에 MVC라고 해서 무슨 말인가 했다.
express말고 다른 MVC 모델 프레임웍을 소개하는건가 했다.
확장하기 편하도록 한 것으로 보인다.
이걸 MVC라 하기에는.. 좀 억지가 있어 보였다. '뭐..보는 사람마다 이해하는 사람마다 다르겠지만..'
내가 볼때에는 그냥 Visitor 패턴을 활용한 확장성을 높여준 코드로 보였다.
좀 더 풀어 쓰면,
Visitor 패턴을 활용한 CRUD 코드 작성하는 예제 코드라 생각하면 좋겠다.
나는 CRUD는 IO접근을 위한 CRUD로 생각하고 있었지.. 이걸 따로 MVC로 CRUD를 구현했다는건지 어떤 의도였는지는 잘모르겠다. 뭐 여튼 결론적으로 하는 말은 같은것 같다. 편하게 코드짜게 해준다? ^^;
// CRUD 연결 메소드
exports.mapRoute = function ( app. prefix ) {
prefix = '/' + prefix;
var prefixObj = require( './controller/' + prefix );
// CRUD 연결 해주는 부분 : 색인 / 추가 / 조회 / 편집 / 업데이트 / 제거
app.get( prefix, prefixObj.index );
app.get( prefix + '/new', prefixObj.new );
app.get( prefix + '/:id', prefixObj.show);
app.post( prefix + '/create'. prefixObj.create)
app.get( prefix + '/:id/edit', prefixObj.edit);
app.put( prefix + '/:id', prefix.update);
app.del( prex + '/:id', prefixObj.destroy);
};
// 서버구동 부분에서 등록
...
app.get('/', route.index);
var prefixes = ['widgets'];
prefixes.forEach( function( prefix) {
map.mapRoute( app, prefix );
});
....
// Widgets.js의 CRUD하는 실체 부분
exports.new = function( req, res ) { ... }
exports.create = function( req, res ) { ... }
exports.show = function( req, res ) { ... }
exports.destroy = function( req, res ) { ... }
exports.edit = function( req, res ) { ... }
exports.update = function( req, res ) { ... }
이렇게 하면~ 기본 단계 완성이 된다~
여기서 어떻게 확장이 되냐고?
위에 굵게 해둔 부분에서 추가 확장할 route를 만들면된다.
var prefixes = ['widgets', 'pictures', 'musics' ];
이렇게 한 후, pictures.js와 musics.js파일을 만들어서 똑같은 template으로 CRUD를 제공해 주면 됨! ㅋㅋ
요약 해서 말하면,
Controller |
CRUD 연결 컨트롤러 생성 |
mapRoute(); |
Model |
CRUD 실체 ( ex; Widgets ) 구현 |
widgets.exports.CRUD(); |
View |
App Route에 연결 |
prefixes.forEach(); |
cURL로 테스트가 된다~ ㅋㅋ
curl --request GET http://ip:3000/widgets/new
curl --request POST http://ip:3000/widgets/create --data 'widgetname=name&widgetprice=1.0'
요러케~
난 갠적으로 다른 테스트툴을 쓰는데~ 간편하게 curl로 확인하는 것도 괜찮은 듯 하다~
MVC 흉내 내기 끝.