如何在Express中导出所有路线?

我有一个NodeJS Express应用程序,在一个文件(app.js)中变得非常大。

我想将所有的路由导出到一个单独的外部文件中,比如./lib/routes.js 。 怎么做?

如何导出下面的代码,并要求在主app.js正确?

 app.get('/logout', function(req, res) { res.render('logout', { username: req.session.username }); }); app.get('/dashboard', function(req, res) { res.render('dashboard', { username: req.session.username }); }); app.get('/login', function(req, res) { res.render('login', { badLogin: false, loginError: false }); }); 

为什么不做这样的事情:

 // logout.js module.exports = function(req, res){ res.render('logout', { username: req.session.username }); }); // dashboard.js module.exports = function(req, res){ res.render('dashboard', { username: req.session.username }); }); // login.js module.exports = function(req, res){ res.render('login', { badLogin: false, loginError: false }); }); // app.js app.get('/logout', require('logout')); app.get('/dashboard', require('dashboard')); app.get('/login', require('login')); 

另外,您可以轻松使用http://nodejs.org/docs/v0.4.8/api/fs.html#fs.readdir来遍历path目录并以编程方式加载它们。

你甚至可以做一些事情…

 module.exports.handler[] = { method : 'get', route : '/login', action : res.render('login', { badLogin: false, loginError: false }); } 

虽然我想我会花一点时间思考如何简化这一点。

我所做的是通过控制器对我的路线进行分组。 对于每组相关的路由(用户,购物车等),我制作一个控制器文件,位于app/controllers/foo.js ,其中foo是控制器的名称。 在我的主要的JavaScript服务器文件(所有你的代码当前居住)中,我require每个控制器的名称,然后调用其setupfunction,传入我的快速app对象,并允许控制器添加任何路由,它需要。

 ['api', 'authorization', 'users', 'tests'].map(function(controllerName) { var controller = require('./controllers/' + controllerName); controller.setup(app); }); 

在每个控制器内部,我做的事情如下:

 exports.setup = function(app) { app.get('/dashboard', function(req, res) { res.render('dashboard', { username: req.session.username }); }); };