【发布时间】:2017-09-10 21:48:29
【问题描述】:
我目前正在使用 mongoose@4.0.4,每当我手动断开 MongoDb 的连接时,mongoose 断开/重新连接事件不会被触发纠正,重新连接事件被触发,并且每次手动断开/启动 MongoDb 时都不会触发断开连接。我的问题是处理 MongoDb 连接和断开连接状态,以便对于向服务器发出的每个请求,我都会看到 MongoDb 连接/断开连接的状态并发送适当的响应(可能是 500 代码),因为如果 MongoDb 不是,请求会在中间挂起连接的。 为了查看这是否是版本问题,我声明了版本 3.8.x 并转到 4.0.4 以查看事件在何处正确触发。我能够从 4.0.x 版本中捕获重新连接事件,但不能捕获断开连接事件。 基本上想知道我可以使用哪个版本来正确触发连接/断开连接事件或处理问题的方法。
下面是代码句柄事件
var db = mongoose.connection;
var connected;
db.on('open', function (ref) {
connected = true;
console.log('open connection to mongo server.');
});
db.on('connected', function (ref) {
global.mongo_conn=true;
console.log('Connected connection to mongo server.');
});
db.on('disconnected', function (ref) {
connected = false;
console.log('disconnected connection.');
});
db.on('disconnect', function (err) {
console.log('Error...disconnect', err);
});
db.on('connecting', function (ref) {
connected = false;
console.log('connecting.');
});
db.on('close', function (ref) {
global.mongo_conn=false;
console.log('close connection.');
connect();
});
db.on('error', function (ref) {
connected = false;
console.log('Error connection.');
//mongoose.disconnect();
global.mongo_conn=false;
});
db.on('reconnected', function () {
global.mongo_conn=true;
console.log('MongoDB reconnected!');
});
db.on('reconnecting', function () {
global.mongo_conn=true;
console.log('reconnecting!');
});
function connect() {
mongoose.connect(config.mongo.uri, opts);
}
connect();
【问题讨论】:
-
你能展示你用来捕捉各种事件的代码吗?
-
最后我把它贴在了 GitHub mongoose bug list 上,它将发布下一个版本的 MongoDB 看这里github.com/Automattic/mongoose/issues/3183。