如何在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谁共享相同的概念。