我正在运行一个连接到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
}
}
}
以前有没有人遇到过类似的问题?知道我在这里做错了什么,或者如何实际捕获错误,所以我可以正确地重新连接?