在Node.js中使用单独的控制器和路由

时间:2012-07-06 20:15:12

标签: node.js

我正在寻找主观建议(我知道这可能会被关闭),但我希望能够在node.js项目中分离路由和控制器,所以我有一些问题:

  • 尝试是没用的,而node.js哲学是否有更少/更大的JS文件?
  • 我希望能够要求(“路由”)并让我将所有路由连接到我的控制器所需的模块。如果我把所有内容放在index.js中,我可以很容易地做到这一点,但这看起来很奇怪。我已经在进行app.get("/" controllers.index);样式分离了,但我正忙着构建一个只包含另一个模块中所有JS文件的模块。我错过了什么吗?
  • 也许有一个完全不同的node.js样式来做这个,我试图将我的ASP.NET MVC知识映射得太深了?

2 个答案:

答案 0 :(得分: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路由。

答案 1 :(得分:0)

如果您打算做一些RESTish API服务器, 试一试:https://github.com/kilianc/node-apiserver 还有例子:https://github.com/kilianc/node-apiserver/blob/master/examples