Node.js 复制集未找到错误后Mongoose无法重新连接
我正在运行一个连接MongoDB Atlas的小网站。它有一个包含3个成员的复制集。在大多数情况下,一切都很好,但时不时,Atlas的复制集崩溃(或其他什么?),猫鼬从此停止工作。它抛出一个错误-Node.js 复制集未找到错误后Mongoose无法重新连接,node.js,mongodb,mongoose,replicaset,Node.js,Mongodb,Mongoose,Replicaset,我正在运行一个连接MongoDB Atlas的小网站。它有一个包含3个成员的复制集。在大多数情况下,一切都很好,但时不时,Atlas的复制集崩溃(或其他什么?),猫鼬从此停止工作。它抛出一个错误-MongoError:在replicaset中找不到主服务器,就是这样 它不会在('error')上触发mongoose.connection.on(),并且在此之后不会报告任何错误。它只是无法返回任何数据 对我来说调试这个有点困难,因为它正在生产环境中运行,我无法判断replicaset何时会失败。以
MongoError:在replicaset中找不到主服务器
,就是这样
它不会在('error')上触发mongoose.connection.on(
),并且在此之后不会报告任何错误。它只是无法返回任何数据
对我来说调试这个有点困难,因为它正在生产环境中运行,我无法判断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
}
}
}
以前有人有过类似的问题吗?你知道我在这里做错了什么,或者如何捕捉错误,以便我可以正确地重新连接吗?你使用的是什么版本的mongoose?副本集选择不应导致连接错误,因为此错误仅在首次连接到副本集时触发。猫鼬应该自动重新连接。请尝试中提供的脚本,看看是否出现除
null
以外的任何错误?我使用的是^4.6.1。测试这一点真的很困难,因为这只发生在生产环境中,当它停止工作时是非常随机的。您是否尝试过升级到最新版本(目前为4.13.9)?此问题可能已在较新的更新中修复。您使用的是什么版本的mongoose?副本集选择不应导致连接错误,因为此错误仅在首次连接到副本集时触发。猫鼬应该自动重新连接。请尝试中提供的脚本,看看是否出现除null
以外的任何错误?我使用的是^4.6.1。测试这一点真的很困难,因为这只发生在生产环境中,当它停止工作时是非常随机的。您是否尝试过升级到最新版本(目前为4.13.9)?此问题可能已在较新的更新中修复。