2
你能簡單地設置單個對象中的所有路由配置嗎?基本上我想要做的是有一個名爲routing.js的文件,它導出一個包含所有路由的對象。不得不爲每條路線使用express.get()是平凡的。expressjs路由配置對象?
你能簡單地設置單個對象中的所有路由配置嗎?基本上我想要做的是有一個名爲routing.js的文件,它導出一個包含所有路由的對象。不得不爲每條路線使用express.get()是平凡的。expressjs路由配置對象?
我實際上有一個文件夾,它包含我的路線的所有文件(我將它們按對象分割)。我也將我的控制器分成文件。路線文件,然後這個樣子:
/**
* 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);
}
這很好,但我正在尋找更像{'/',controller.index}的東西 – LordZardeck
一旦你想開始添加中間件到你的路由,這將會非常受限制,另外你需要區分get,post,update和del。所以你真的只是從app.post('/',controller.index)到'{'post','/',controller.index}加上一些輔助代碼。我已經更新了我的回覆,其中包括一個可以註冊路線的簡單助手。 – Bill
所以基本上我必須創建一個解釋器,如果我想這樣做嗎? Express沒有內置? – LordZardeck