重新连接后mongoose查询挂起

时间:2018-05-31 03:45:06

标签: node.js mongodb mongoose

我有一个带有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连接,应用程序崩溃。

0 个答案:

没有答案