我有一个mongoose应用程序,它定期运行一个计划任务。不幸的是,在第一次运行之后,整个任务在关闭之前就会挂起,并且不再运行。
更令人惊讶的是,在将其评论几乎为零之后,它仍然悬而未决。在这一点上,我们的程序看起来像这样:
var mongoose = require('mongoose');
var config = require('../lib/config');
var log = require('../lib/custom-log');
var db = mongoose.connection;
db.on('error', function(err) {
console.log("Mongoose connection error: " + err);
mongoose.disconnect();
});
db.once('open', function() {
console.log("db is open");
mongoose.disconnect();
});
db.once('close', function() {
console.log("db is closed");
});
mongoose.connect(config.database.uri);
结果:
db已打开
db已关闭
然后挂起。
我们在Ubuntu 14.10上运行Node 0.10.36,并通过MongoDB URI连接到3节点复制集。
答案 0 :(得分:1)
当我参与解决这个问题时,我会回答导致它的原因并向Mongoose提交错误报告。
问题是由于3个节点中有2个突然从副本集中突然出现,但它们仍然在MongoDB URI中。所以,一切都运行正常,没有触发任何错误,但是Mongoose(或者MongoDB驱动程序)挂断了,因为这两个节点而不是引发异常并向开发人员提供关于什么是破坏的线索。 / p>