NodeJS(Express) - 项目结构和mongo连接

时间:2015-06-15 21:34:44

标签: node.js mongodb express

我从头开始用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。

有什么想法吗? 非常感谢

1 个答案:

答案 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

访问所有模块