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

时间:2016-10-17 08:02:20

标签: javascript node.js mongodb express monk

我在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

中访问

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

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

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

就像在index.js中一样:

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

我的示例有mongodb和不同的网址,根据您的需要进行更改,因为我不知道monk可能您需要导出整个和尚配置。它会起作用

答案 2 :(得分:0)

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