【发布时间】:2019-06-28 21:56:02
【问题描述】:
我正在使用以下命令将 nodejs 应用程序连接到我的 mongodb 数据库:
const url = 'mongodb://localhost:27017/?replicaSet=rs'
let client = new MongoClient(url, {
useNewUrlParser: true,
connectTimeoutMS: 60000,
socketTimeoutMS: 60000,
})
try {
let dbclient = await client.connect()
console.log(dbclient)
const db = dbclient.db('test')
const collection = db.collection('accounts')
const changeStream = collection.watch(pipeline)
changeStream.on("change", function(change) {
console.log('changed', change)
})
} catch (err) {
console.log('mongo err:', err)
}
这工作得很好,但是它经常在几分钟后失去连接并出现错误:
未捕获的 MongoNetworkError:连接 6 到 localhost:27017 超时
根据the documentation,它应该会在出错时自动重新连接多达 30 次尝试,但它似乎不会再尝试重新连接。
我还需要在重新连接时运行一些额外的逻辑以正确处理本地状态。
如何捕捉和处理这些错误?
编辑:虽然我仍然没有收到其他事件,但在错误发生后我收到了“重新连接”事件。所以看起来我至少可以对错误做出反应,但实际上仍然无法捕捉到它们。
【问题讨论】:
-
只需添加连接
keepAlive: true,或特定时间keepAlive: 300000 -
将其设置为
true似乎可以解决问题,谢谢! -
我会将其添加为答案。也许有人会觉得它有帮助。
-
您是否尝试过设置
bufferMaxEntries:0,以便您断开连接后操作会失败? -
@Thebluefish 运气好吗?