単一のオブジェクトですべてのルーティング構成を簡単に設定できますか? 基本的に私がやりたいことは、すべてのルートを含むオブジェクトをエクスポートする routing.js というファイルを用意することです。すべてのルートに express.get() を使用する必要があるのはありふれたことです。
質問する
541 次
1 に答える
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);
}
于 2012-05-06T15:45:58.573 に答える