我正在使用以下命令将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:27017超时
根据the documentation,它应自动重新连接多达30次尝试错误,但是似乎没有做出任何进一步的尝试来重新连接。
我还需要在重新连接时运行一些其他逻辑,以正确处理本地状态。
如何捕获和处理这些错误?
编辑:虽然我仍然没有收到其他事件,但是在发生错误之后我得到了“重新连接”事件。因此,看来我至少可以对错误做出反应,但仍然无法真正抓住它们。
答案 0 :(得分:3)
只需添加到连接dialogRef.afterClosed().subscribe(result => {
console.log('The dialog was closed');
console.log(result);
// this.buttonClick.emit(this.enable=false);
if (result === true) {
this.displayBanner ()
this.showItem = false;
}
});
或特定时间keepAlive: true
在此处查看示例:https://ide.c9.io/ibrahimth/mongo
keepAlive: 300000
有关更多信息:http://mongodb.github.io/node-mongodb-native/3.0/tutorials/collations/
答案 1 :(得分:0)
尝试一下
var MongoClient = require('mongodb').MongoClient;
var mongo = {};
mongo.init = function() {
MongoClient.connect('mongodb://localhost:27017/db',function(err, db) {
if (err) {
console.log('Err',err);
} else {
mongo.DB = db;
}
db.on('reconnect', function() {
mongo.DB = db;
});
}
}
答案 2 :(得分:0)
我建议您添加reconnectTries
来充当服务器尝试重新连接#次,并添加其他可使连接稳定的选项,然后将代码修改回: >
const url = 'mongodb://localhost:27017/?replicaSet=rs'
let client = new MongoClient(url, {
useNewUrlParser: true,
connectTimeoutMS: 30000,
socketTimeoutMS: 360000,
useMongoClient: true,
keepAlive: true,
reconnectTries: 30
})
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)
}