2

単一のオブジェクトですべてのルーティング構成を簡単に設定できますか? 基本的に私がやりたいことは、すべてのルートを含むオブジェクトをエクスポートする routing.js というファイルを用意することです。すべてのルートに express.get() を使用する必要があるのはありふれたことです。

4

1 に答える 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 に答える