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

我完全不熟悉Node.js和Mongo db。 不过,我想开始第一个项目来熟悉所有这些东西。

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

在大多数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'); }); 

那menas,我连接到数据库和所有我的应用程序居住在该连接调用的callback。 此外,我真的不知道我的整个应用程序生活在callback中的想法,当我有多个数据库连接时,会变得更糟糕:应用程序将生活在callbackcallback的callback中…(这将导致一个真正的缩进噩梦。)

我的第一个想法是放置连接调用,然后将我在callback中收到的数据库对象导出到一些(模块)全局variables。

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

总而言之,对于如何连接数据库以及稍后在应用程序逻辑中重用这些连接,我仍然缺乏一个好主意。

我敢肯定,这不是一个非常不寻常的情况,所以,请帮助我,并指出我的一些build议如何处理这一点。

Big Thanx!

费利克斯

不要将整个应用程序逻辑存储在connectcallback中。 相反,将数据库对象分配给您的整个应用程序可以看到的东西

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

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