如何在Node.js中正确打开和维护与多个Mongo数据库的连接?

时间:2015-09-13 09:33:59

标签: node.js mongodb database-connection connection-pooling node-mongodb-native

我对Node.js和Mongo数据库完全陌生。但是,我想开始一个第一个了解所有这些东西的项目。

服务器应用程序将基于Express,我想出为appDdata,sessionData和userData使用三个不同的mongo数据库。现在我很难弄清楚如何连接到这些数据库以及如何维护连接并传递访问对象。

在大多数express / mongo教程中,有一些玩具示例就像这样:

MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
"use strict";
if(err) throw err;

// Register our templating engine
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');

// Express middleware to populate 'req.cookies' so we can access cookies
app.use(express.cookieParser());

// Express middleware to populate 'req.body' so we can access POST variables
app.use(express.bodyParser());

// Application routes
routes(app, db);

app.listen(8082);
console.log('Express server listening on port 8082');
});

那个me​​nas,我连接到数据库,我的所有应用程序都在该连接调用的回调中。除此之外,我真的不认为我的整个应用程序都存在于回调中,当我有多个数据库连接时,它会变得更糟:应用程序将存在回调回调的回调... (这将导致真正的缩进噩梦。)

我的第一个想法是放置连接调用,然后将我在回调中收到的db对象导出到某些(模块)全局变量。

但是如何处理这种情况,当连接尚未建立或死亡时?

总而言之,我仍然不知道如何连接数据库并稍后在我的应用逻辑中重用这些连接。

我确定这不是一个非常不寻常的情况,所以,请帮助我,并指出我如何处理这个问题。

Big Big Thanx!

菲利克斯

1 个答案:

答案 0 :(得分:1)

不要将整个应用程序逻辑存储在connect回调中。而是将db对象分配给整个应用程序可以看到的内容

var db1;
var db2;
var db3;

MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
   db1= db
});
MongoClient.connect('mongodb://otherdb:27017/', function(err, db) {
   db2= db
});
MongoClient.connect('mongodb://someotherdb:27017/', function(err, db) {
   db3= db
});
// application logic
// Register our templating engine
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');

// Express middleware to populate 'req.cookies' so we can access cookies
app.use(express.cookieParser());

// Express middleware to populate 'req.body' so we can access POST variables
app.use(express.bodyParser());

// Application routes
routes(app, db1);

虽然我不确定为什么你会想要这样的三个单独的数据库来存储您需要的数据类型。除非有一些非常令人信服的理由将它们分开,否则我觉得它们可以很容易地在同一个数据库中作为单独的集合生存,以减少复杂性。