我想意見/建議是否這是一個很好的方式來實現/增強MVC模式與Node.js和Express.js這是一個與MVC模式和Express.js一起工作的好方法嗎?
1)我正常初始化應用程序,但在這個階段,我打電話給函數I命名routeRegistrar
,如下所示:
var
express = require('express'),
routeRegistrar = require('./routeRegistrar'),
var app = express.createServer();
configureApp(app);
routeRegistrar(app); //note this line
app.listen(3000, function(){
console.log("App started");
});
function configureApp(app){
app.configure(function(){
//configuration stuff with app variable
});
}
2)I採用每個控制器將被放置在稱爲Controllers
目錄中的慣例,並且每一個控制器由包含一個或多個動作的模塊構成時,推到exports
變量作爲遵循上述約定的對象:
{ method: 'GET', url: '/example', action: function(req, res){ } }
所以這樣我可以自動化路由註冊過程,並保持方法/ url接近處理請求的代碼(我認爲它更易於閱讀/維護)。所以對於routeRegistrar
的代碼如下:
var fs = require('fs');
module.exports = function(app){
fs.readdirSync(__dirname + '/controllers').forEach(function(controllerName){
var controller = require("./controllers/" + controllerName);
for (var actionName in controller) {
var action = controller[actionName];
app[action.method](action.url, action.action);
}
});
}
和簡便的一種indexController的是這樣的:
exports.index = {
url: "/",
method: "get",
action: function(req, res){
res.render('index');
}
}
恕我直言,我相信這是每一個我想要的時間提供更好的辦法了新的控制器/路線註冊我不得不
1-開放app.js 2-發生在頂部 另一個需要線等app.get('/index', indexController.index);
請讓我知道這是繼續項目的好方法,我想聽聽您的意見和建議。
編輯: 基於Tyrsius答案,缺乏其他的意見,我會使用他的方法與一些修改:
routeRegistrar.js
var fs = require('fs');
module.exports = function(app){
fs.readdirSync(__dirname + '/controllers').forEach(function(controllerName){
var controller = require("./controllers/" + controllerName);
for (var actionName in controller) {
controller[actionName](app);
}
});
};
indexController.js
module.exports.index = function(app){
app.get("/", function(req, res){
res.send("New approach!");
});
};
如果我是我看看[表達資源(https://github.com/visionmedia/express-resource/)在你的鞋子 - 這是一個很好的承擔,國際海事組織。但是,我沒有在你的設計中發現任何錯誤。編輯:剛纔看到你的編輯。我自己我喜歡明確列舉我的路線。但這是一個品味問題。儘管您也可以自動加載快速資源模塊。 – 2012-07-25 16:27:29