我有一个nodejs应用程序,它使用mongodb并在k8s上运行。但是每当我更改mogodb地址时,我都会遇到问题,k8s pod会挂起,我将重新启动到pod以使其再次运行。所以我认为这是因为当时节点服务崩溃了。如何编写我的代码以连接到mongodb,方式是当nodejs应用程序无法连接到mongodb或mondodb失败或发生某些事情时不会崩溃。我目前的代码是
exports.connect = function() {
return MongoClient.connect(mongourl);
};
所以,你想要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
这样的属性和所有这些可能不匹配。