[Node.js] 如何在Express中的多個文件中包含路由處理程序?


Answers

基於@ShadowCloud的示例,我能夠將所有路由動態包含在子目錄中。

路線/ index.js

var fs = require('fs');

module.exports = function(app){
    fs.readdirSync(__dirname).forEach(function(file) {
        if (file == "index.js") return;
        var name = file.substr(0, file.indexOf('.'));
        require('./' + name)(app);
    });
}

然後將路由文件放置在路由目錄中,如下所示:

路線/ test1.js

module.exports = function(app){

    app.get('/test1/', function(req, res){
        //...
    });

    //other routes..
}

根據需要重複此次數,然後在app.js中放置

require('./routes')(app);
Question

在我的NodeJS express應用程序中,我有app.js ,它有一些常見的路線。 然後在一個wf.js文件中,我想定義一些更多的路線。

我怎樣才能讓app.js識別wf.js文件中定義的其他路由處理程序?

一個簡單的要求似乎不起作用。




如果你想要一個單獨的.js文件來更好地組織你的路由,只需在app.js文件中創建一個指向它在文件系統中的位置的變量:

var wf = require(./routes/wf);

然後,

app.get('/wf', wf.foo );

其中.foo是在wf.js文件中聲明的一些函數。 例如

// wf.js file 
exports.foo = function(req,res){

          console.log(` request object is ${req}, response object is ${res} `);

}



並且在前面的回答中構建更多,這個routes / index.js版本將忽略任何不以.js結尾的文件(以及它本身)

var fs = require('fs');

module.exports = function(app) {
    fs.readdirSync(__dirname).forEach(function(file) {
        if (file === "index.js" || file.substr(file.lastIndexOf('.') + 1) !== 'js')
            return;
        var name = file.substr(0, file.indexOf('.'));
        require('./' + name)(app);
    });
}



對所有這些答案進行調整:

var routes = fs.readdirSync('routes')
      .filter(function(v){
         return (/.js$/).test(v);
      });

只需使用正則表達式來通過測試數組中的每個文件進行過濾。 它不是遞歸的,但會過濾掉不以.js結尾的文件夾









Links