如何在node.js中访问整个应用程序中的数据库连接?

我在app.js中连接mongodb和monk

 var express = require('express'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); app.use(function(req,res,next){ req.db = db; next(); }); 

它在这里工作正常。 但是现在我在route文件夹中添加index.js

 var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); exports.index = function(req, res){ var collection = db.get('usercollection'); collection.find({},{},function(e,docs){ res.render('userlist', { "userlist" : docs}); }); res.render('index', { title: 'Express' }) }; 

它也工作正常。 但是我在app.js和index.js中都连接了DB。 我需要做的事情是在app.js中定义的连接可以在index.js中访问

我知道的两个解决scheme是:

把连接放在另一个文件中,导入该文件。

db.js

 var monk = require('monk'); module.exports = monk('localhost:27017/nodetest1'); 

其他文件:

 var db = require('./db.js'); 

或者传递相同的连接:

app.js:

 var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); var module = require('./myModule.js')(db); 

myModule.js:

 module.exports = (db) => { //... }; 

要么:

app.js:

 var monk = require('monk'); var db = monk('localhost:27017/nodetest1'); var module = require('./myModule.js'); module.init(db); 

myModule.js:

 var db; exports.init = (masterDb) => { db = masterDb; }; 

并确保db在使用之前设置。

创build一个单独的文件,如database.js ,并将其中的代码:

 module.exports = { url : 'mongodb://localhost/productecom' }; 

并需要这个文件,你需要数据库连接:

就像在index.js中一样:

 var database = require('./database'); mongoose.connect(database.url); 

我的例子有mongodb和不同的url,根据你的需要作出改变,因为我不知道monk也许你需要出口整个和尚configuration,它会工作

只需用数据库连接创build一个简单的db.js文件,并在需要使用它时需要连接,如下所示:

db.js

 var monk = require('monk'); module.exports = monk('localhost:27017/nodetest1'); 

app.js

 ... var db = require('./db.js'); app.use(function(req,res,next){ req.db = db; next(); }); 

index.js

 var db = require('./../db.js'); exports.index = function(req, res){ var collection = db.get('usercollection'); collection.find({},{},function(e,docs){ res.render('userlist', { "userlist" : docs}); }); res.render('index', { title: 'Express' }) }; 

信用到@DrakaSAN谁共享相同的概念。