您可以简单地在一个对象中设置所有路由配置吗?基本上我想做的是有一个名为routing.js的文件,它导出一个包含所有路由的对象。必须为每条路线使用express.get()是平凡的。
答案 0 :(得分:2)
我实际上有一个文件夹,其中包含我的路线的所有文件(我按对象拆分)。我也将控制器分离成文件。路径文件如下所示:
/**
* Module dependencies.
*/
var controller = require('../controllers/index');
/**
* The API root for this object.
*/
var root = '/';
/**
* Route definitions.
*/
var routes = function (app) {
// get index
app.get(root, controller.getIndex);
};
/**
* Exports.
*/
module.exports = routes;
然后在我的app.js文件中执行此操作,自动加载所有路由文件并配置500和404路由:
fs.readdir(__dirname + '/routes', function (err, files) {
if (err) throw err;
files.forEach( function (file) {
require('./routes/' + file)(app);
});
/**
* 500 page.
*/
app.use( function (err, req, res, next) {
if (err && err.status === 404) {
return next();
}
res.statusCode = 500;
res.render('404.html', {status: 500, url: req.url, error: ': ' + err.message});
});
/**
* 404 page.
*/
app.use( function (req, res, next) {
res.statusCode = 404;
res.render('404.html', {status: 404, url: req.url});
});
});
如果你不想像这样读取文件,导入部分就是这一行:
require('./routes/' + file)(app);
允许您使用之前定义的路线。
我这样做是为了保持对确切创建路线的控制。如果您想自动执行该过程,可以使用https://github.com/visionmedia/express-resource。
这允许你这样做:
var express = require('express'),
Resource = require('express-resource'),
app = express.createServer();
app.resource('forums', require('./forum'));
为了自动创建指向./forum中的以下函数的路由:
GET /forums -> index
GET /forums/new -> new
POST /forums -> create
GET /forums/:forum -> show
GET /forums/:forum/edit -> edit
PUT /forums/:forum -> update
DELETE /forums/:forum -> destroy
如果你想要更简单的东西,你可以这样做......
var getRoutes = [['/', controller.index], ['/post', controller.showPost]];
for (var i = 0, len= getRoutes.length; i < len; i++) {
var path = getRoutes[i][0];
var controller = getRoutes[i][1];
app.get(path, controller);
}