在我的NodeJS express应用程序中,我有app.js,它有一些常见的路由。然后在wf.js文件中,我想定义更多的路由。
如何让app.js识别在wf.js文件中定义的其他路由处理程序?
一个简单的要求似乎不起作用。
在我的NodeJS express应用程序中,我有app.js,它有一些常见的路由。然后在wf.js文件中,我想定义更多的路由。
如何让app.js识别在wf.js文件中定义的其他路由处理程序?
一个简单的要求似乎不起作用。
当前回答
我写了一个小插件来做这件事!我厌倦了一遍又一遍地写同样的代码。
https://www.npmjs.com/package/js-file-req
希望能有所帮助。
其他回答
如果你想把路由放在一个单独的文件中,例如routes.js,你可以这样创建routes.js文件:
module.exports = function(app){
app.get('/login', function(req, res){
res.render('login', {
title: 'Express Login'
});
});
//other routes..
}
然后你可以从app.js中以这样的方式传递app对象:
require('./routes')(app);
看看这些例子:https://github.com/visionmedia/express/tree/master/examples/route-separation
基于@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);
});
}
然后将路由文件放在routes目录中,如下所示:
路线/ test1.js
module.exports = function(app){
app.get('/test1/', function(req, res){
//...
});
//other routes..
}
根据需要重复多次,最后在app.js中放置
require('./routes')(app);
在前面答案的基础上,这个版本的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);
});
}
我写了一个小插件来做这件事!我厌倦了一遍又一遍地写同样的代码。
https://www.npmjs.com/package/js-file-req
希望能有所帮助。
如果你想要一个单独的.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} `);
}