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

How to acess db connection in whole app in 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();
});

它在这里工作正常。但现在我在路线文件夹

中添加 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 中都连接了数据库。 app.js 中定义的连接在 index.js

中可以访问我需要做的事情

database.js一样创建一个单独的文件并将代码放入其中:

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

并在需要数据库连接的地方需要这个文件:

喜欢index.js:

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

我的示例有 mongodb 和不同的 url,根据您的需要进行更改,因为我不知道 monk 也许您需要导出整个 monk 配置。,它将工作

我知道的两种解决方案是:

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

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

只需创建一个带有数据库连接的简单 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。