我有一个使用mongodb并在k8s上运行的nodejs应用程序。但是,每当我更改mogodb地址时,我都会遇到问题,k8s吊舱挂起,必须重新启动吊舱才能使其再次正常工作。因此,我认为是因为当时节点服务崩溃而发生的。 我如何编写我的代码以连接到mongodb,以使其在无法连接到mongodb或mondodb出现故障或发生故障时,它不会崩溃。 我当前的代码是
exports.connect = function() {
return MongoClient.connect(mongourl);
};
答案 0 :(得分:0)
因此,您想要mongo连接失败。它不应使应用程序崩溃。
您可以处理error
回调并做您想做的任何事情。
就我而言,如果数据库失败,我将重新连接数据库。
如下所示:
var mongoose = require('mongoose');
var connection = mongoose.connection;
connection
.on('error', function (err) {
console.log("Error in MongoDB Connection");
console.error(err);
})
.on('disconnected', reConnect)
.once('open', listen);
connection.on('reconnected', function () {
console.log('MongoDB reconnected!');
});
function connect() {
const connection = mongoose.connect(<mongo Uri here >, <connection options>,(err)=>{
reConnect();
});
return connection;
}
function reConnect() {
if (mongoose.connection.readyState == 0) {
console.log(mongoose.connection.readyState);
//you can just try to connect here now.
// connect();
}
else {
console.log("I am already Connected");
}
}
connect();
module.exports = mongoose;
所以我在这里使用过mongoose
,您可以按照我处理错误的方式进行操作。
Mongoclient Docs我看到了,它也支持回调。因此您可能可以以相同的方式处理错误。 .connection
之类的属性,但所有属性可能都不匹配。