如何在node.js中访问整个应用程序中的db连接

How to acess db connection in whole app in node.js?

本文关键字:应用程序 连接 db 访问 node js      更新时间:2023-09-26

我连接mongodb与monk在app.js

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();
});

这里工作得很好。现在我在routes文件夹

中添加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

中访问

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

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

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设置

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

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

并在需要数据库连接时需要此文件:

类似于index.js:

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

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

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