2012-07-06 87 views
7

我在尋找主觀建議(我知道這可能會關閉),但是我希望能夠在node.js項目中分離路由和控制器,所以我有一些問題:在Node.js中使用單獨的控制器和路由

  • 嘗試使用node.js哲學是否具有更少/更大的JS文件是沒用的?
  • 我希望能夠要求(「路由」)並將我的所有路由連接到我的控制器所需的模塊。如果我只是將所有內容都放在index.js之內,我可以輕鬆做到這一點,但這看起來很奇怪。我已經在做app.get("/" controllers.index);樣式分離,但是我正在建立一個只包含所有JS文件到另一個模塊的模塊。我錯過了什麼嗎?
  • 或者也許有一個完全不同的node.js風格來做到這一點,我試圖將我的ASP.NET MVC知識映射得太深?
+0

嘗試一個輕量級的表達,熨斗MVC https://github.com/pksunkara/bullet/tree /主/示例/ – 2012-07-06 20:25:00

回答

7

如果你想獲得這一切成一個文件,你可以嘗試這樣的事情,這需要每個文件在./routes/並調用出口到每個app爲參數的函數:

// routing.js 

var fs = require('fs'); 

module.exports = function(app) { 
    fs.readdirSync(__dirname + '/routes/').forEach(function(name) { 
    var route = require('./routes/' + name); 
    route(app); 
    }); 
} 

// routes/index.js 

module.exports = function(app) { 
    app.get('/something', function(req, res) { ... }); 
    app.get('/something/else', function(req, res) { ... }); 
} 

// routes/pages.js 

module.exports = function(app) { 
    app.get('/pages/first', function(req, res) { ... }); 
    app.get('/pages/second', function(req, res) { ... }); 
} 

// server.js 

var app = express.createServer(); 
require('./routing')(app); // require the function from routing.js and pass in app 

在GitHub的Express'example目錄中也有一些有趣的例子,比如an MVC-based one,它實現了與Rails很相似的RESTful路由。