我有一个带有koajs(v1.2.0)的nodejs api,一个mongodb数据库并使用mongoose(v4.7.3)来访问我的数据。 我的db是位于云上的副本集,连接的代码如下所示:
const options = {
socketOptions: {
socketTimeoutMS: 0,
keepAlive: true
},
auto_reconnect: true,
reconnectTries: Number.MAX_VALUE
}
mongoose.connect(MONGO_URL, {
server: options,
replset: options
});
一切正常但是当我试图关闭我的无线网然后再打开时,我可以看到
mongoose.connection.readyState
从1(已连接)变为0(已断开连接),然后再次进入1(已连接),这是正确的。 但是当我试图调用查询db的api端点时:
function *example() {
let data
try {
data = yield model.findOne({});
} catch (e) {
console.log('e', err);
}
this.body = data;
}
查询暂停,一段时间后它将返回而不从mongo获取数据。 在chrome调试控制台中,请求的状态是(失败)net :: ERR_EMPTY_RESPONSE。
编辑:重现错误:https://github.com/superphung/mongoose-query-pending(按照自述文件中的说明操作)。 我注意到如果我使用副本集或独立的mongodb,行为是不同的。使用副本集,如果我删除了wifi但在重新连接后查询处于挂起状态,则nodejs不会崩溃。使用独立的mongo,如果我禁用wifi连接,应用程序崩溃。