找不到replicaset后,Mongoose无法重新连接错误

时间:2017-11-22 15:49:15

标签: node.js mongodb mongoose replicaset

我正在运行一个连接到MongoDB Atlas的小型网站。它有3个成员的复制品。在大多数情况下,一切都运行得很好,但现在Atlas的复制品崩溃(或其他东西?),而Mongoose从那时起停止工作。它会抛出一个错误 - MongoError: no primary found in replicaset,就是这样。

它不会触发mongoose.connection.on('error'),并且在此之后不会报告任何错误。它无法返回任何数据。

这对我来说很难调试,因为这是在生产中运行的,而且我无法确定replicaset何时会失败。这是我的连接方式:

function connect() {
  tries++;
  mongoose.Promise = Promise;
  const { uri, options } = config.mongoDb;
  return mongoose.connect(uri, options);
}

let db = connect();
db
    .connection
    .on('error', (err) => {
        Raven.captureException(err);
        db.disconnect();
    })
    .on('disconnected', () => {
        db = connect();
    });

我的选择如下:

options: {
  server: {
    autoReconnect: true,
    ssl: true,
    poolSize: 10,
    socket_option: {
      keepAlive: true
    }
  }
}

以前有没有人遇到过类似的问题?知道我在这里做错了什么,或者如何实际捕获错误,所以我可以正确地重新连接?

0 个答案:

没有答案