express.js은 표준 MVC 개발 패턴을 구현하는 알맞은 베어 본 시스템을 제공합니다. 그러나 대부분의 튜토리얼은 라우트 파일이나 글로벌 앱 파일에 컨트롤러 로직을 적용합니다. 이상적인 세계에서는 Express.JS를 사용하는 기본 MVC 원칙
:모델은 - 기본 동작 및 데이터
컨트롤러을 관리 - 모델과 뷰에 명령을 전송
보기이 -으로부터 데이터를 렌더링 모델
현재 내가 다음과 같습니다 - 경로 /가 hotels.js 작업에
router.get('/hotels', function(req, res, next) {
hotels.run(req, res, next);
next();
});
컨트롤러를 가리키는 -
루트 /하는 index.js 모델에 명령을 전송 컨트롤러를
module.exports = {
run: function(req, res, next) {
var users = new require('../models/hotels');
users.run(function(callback) {
res.render('hotels', { title: 'Hotels page', users: callback });
});
}
}
모델/hotel.js - 모델 요청 데이터
module.exports = {
run: function(callback) {
connection.query(sql, function(err, rows, fields) {
callback(rows);
//console.log(rows);
});
}
}
아무리 노력해도 모델에서 데이터를 가져 와서 컨트롤러로 돌아가서 뷰로 전달할 수 없습니다. 내가 표현한 새로운 코드이므로 아마 위의 코드 내에 여러 개의 오류가 있음을 이해합니다. 하지만 기본 있어야합니다, 그리고 내가 왜 모델 데이터를 반환 할 수 없다는 명백한 뭔가가, 콜백 이외의 모든 논리 작동합니다.
경로에서 컨트롤러에 전달했기 때문에'next'를 두 번 실행 한 후 다음 줄에서 실행하면됩니다. 둘 중 하나만 수행하십시오. 나는 또한 router.get ('/ hotels', hotels.run)에 대한 경로를 단순화 할 것이다. –
팁 덕분에 @KevinB가 수정 될 것이다. – gardni