node.js传递variables

我正在寻找一些经验丰富的node.js程序员的方向。 我遇到的最大问题是将variables传递到单独的模块中。 例如在我的server.js我有以下几点:

var db = mongoose.createConnection('localhost','test'); 

现在我没有在server.js文件里面运行我的路由,他们被分成了自己的文件。 所以对于一个博客的例子可能是这样的:

 app.get('/blog/post/:id',function(req,res){ //do something here } 

现在就是问题出现的地方。我不想在每个路由中设置数据库连接,更不用说我会认为这会造成大量的连接。 我该如何处理这个问题,是否有一个样例“真实世界”应用程序在那里,因为我似乎无法find任何关于这一点,我知道人们之前必须有这个问题。 我知道节点caching模块,但我不能想象它会caching连接,因为它是在自己的模块。 我创build了一个只保存站点configuration的configuration模块,因此需要这个我需要的地方不是问题。 我想还有其他的事情,我想要做到这一点,所以最好现在就明白这一点。

任何帮助表示赞赏。

       

网上收集的解决方案 "node.js传递variables"

这是我在我的真实世界的应用程序做什么。

我有一个名为redis的模块(这是我使用的数据库)。 它包含以下代码:

 var store; exports.store = store = redis.createClient(config.port, config.url); 

所以,如果需要,我可以直接访问客户端。 我几乎从来没有这样做。 相同的模块包含这样的代码:

 exports.getData = function(dataID, callback){ var key = DATA_STORE_PREFIX; try{ store.hget(key, dataID, callback); } catch(err){ callback(err); } } 

我通过在一个或多个路由模块中包含redis模块并使用它来调用它,如下所示:

 var db = require('redis'); db.getData('someData', function(err, result){ console.log(result); // real world code goes here! }); 

其余的节点模块系统负责处理。

一种方法是将连接作为一个对象的属性添加,所有需要它的模块都可以使用它。 例如在我的快速应用程序中,我在我的主应用程序文件中有这样的东西:

 require('./config/database')(app); 

config/database文件如下所示:

 var mongoose = require('mongoose'); module.exports = function(app) { var database = app.get('env'); var uri = database === 'production' ? 'something...' : 'localhost'; return app.locals.db = mongoose.createConnection(uri, database); }; 

任何需要数据库连接的模块都可以通过导出一个以app为参数的函数来访问app.locals.db (就像上面那样)。 当然,如果你使用的不是快递以外的东西,你需要修改这个,但是这个想法是一样的。

我明白你正在使用快递。 做就是了:

 app.set('db', mongoose.createConnection('localhost','test')) 

然后在任何模块构造函数中,确保传递appvariables,并且可以使用app.get('db')来获取db的工作。