2012-05-06 13 views
2

すべてのルーティング設定を1つのオブジェクトに設定できますか?基本的には、すべてのルートを含むオブジェクトをエクスポートするrouting.jsというファイルがあります。すべてのルートにexpress.get()を使用するのは普通です。expressjsルーティング設定オブジェクト?

答えて

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); 
} 
+0

これはいいですが、私は{'/'、controller.index}のようなものを探しています – LordZardeck

+0

ミドルウェアをあなたのルートに追加し始めたらすぐにかなり制限されますし、 'get'、' post'、 'update'、' del'を区別する必要があります。だからあなたは本当に 'app.post( '/'、controller.index)'から '{'post'、 '/'、controller.index}'といくつかのヘルパーコードに行きます。私はルートを登録する簡単なヘルパーを含めるように私の応答を更新しました。 – Bill

+0

基本的に私はそうしたいと思ったら通訳を作る必要がありますか? Expressには内蔵されていませんか? – LordZardeck

関連する問題