我有一个MongoDB的应用程序作为后端。当应用程序启动时,我会设置连接并在以后的请求中使用它。
但是,如果同时我的db conncetion失败(即mongod崩溃),我怎样才能在请求时间检查?
澄清一下:
db.once('open', function../* setup */)
db.find(conditions, function(err, res) { if (err) ...else ...})
。我想要做的是在db.find()
子句之前检查连接是否处于活动状态。因此,如果它关闭,我可以尝试重新启动数据库连接。
P.S。我知道,我应该设置一些连接池或类似的连接池,而不是一直保持连接,但现在它设置为原样。
答案 0 :(得分:5)
您可以使用事件将其作为回调来处理 并且可能有一个全局变量来识别它没有连接。
您可以拥有单独的db.js
文件,该文件将作为模块运行。你可以有功能从中获取收集。
var mongodb = require('mongodb');
var client;
var collections = { };
new mongodb.Db( ... ).open((function (err, c) {
if (!err) {
client = c;
client.on('close', function() {
client = null; // clear client
collections = { }; // clear old collections
// connection closed
});
} else {
// error connecting
}
});
// get collection
exports.get = function(name, callback) {
if (client) {
if (!collections[name]) {
collections[name] = new mongodb.Collection(client, name);
}
callback(null, collections[name]);
} else {
// can perform reconnecting and then get collection and call callback
callback(new Error('not connected'));
}
}
所以要使用它:
var db = require('./db.js');
db.get('users', function(err, collection) {
if (!err) {
collection.find({ ...
} else {
console.log(err);
}
});
对不起,刚刚注意到你使用的是Mongoose,可能会略有不同。