我从头开始用ExpressJS开始了一个新项目。 一切正常,但现在我开始有十几个'app.get(....)'函数,我需要给项目一个结构。
我想到的很简单,它应该有一个名为'routes'的文件夹,其中包含一个文件,例如'module1.js',所有app.get都与该模块相关。 (就像我在许多例子中看到的那样)
问题是如何告诉Express将'http://url/module1/'路由到该路由文件以及如何传递一个param变量,包含例如mongodb连接。
我尝试的是:
var params = {
db: myMongoConnection
};
var mod1 = require('routes/module1');
app.use('/module1', mod1);
但现在我仍然想念'params'。 如果我尝试将它作为参数传递给require方法,我会收到错误,说它需要中间件。
另一个问题与myMongoConnection在连接回调中有效有关,因此我认为我需要在MongoClient连接回调中要求并使用route.js。
有什么想法吗? 非常感谢
答案 0 :(得分:0)
对于自定义模块,请创建一个文件夹,将其命名为modules
在其index.js
中,展示您需要的模块。
像,
var mods = [
'mod1',
'mod2',
];
function init() {
var expose = {};
var params = {
db: myMongoConnection
};
mods.forEach(mods, function (mod) {
expose[mod] = require('./' + mod)(params);
});
return expose;
}
// export init
module.exports = init;
在mod1.js
中,打包params
module.exports = function(params) {
// all your functions here will have access to params.
}
然后在server/app.js
中,请求并在应用中设置它。
app.set('mods', require('path-to/modules'));
现在,您可以使用app.get('mods').moduleName.methodname