Javascript 是否存在mongoose连接错误回调

Javascript 是否存在mongoose连接错误回调,javascript,mongodb,node.js,mongoose,Javascript,Mongodb,Node.js,Mongoose,如果mongoose无法连接到我的数据库,如何设置错误处理回调 我知道 connection.on('open', function () { ... }); 但是有类似的东西吗 connection.on('error', function (err) { ... }); ?当您连接时,您可以在回调中发现错误: mongoose.connect('mongodb://localhost/dbname', function(err) { if (err) throw err; });

如果mongoose无法连接到我的数据库,如何设置错误处理回调

我知道

connection.on('open', function () { ... });
但是有类似的东西吗

connection.on('error', function (err) { ... });

当您连接时,您可以在回调中发现错误:

mongoose.connect('mongodb://localhost/dbname', function(err) {
    if (err) throw err;
});

如果有人遇到这种情况,我正在运行的Mongoose版本(3.4)将如问题中所述工作。因此,以下内容可能会返回一个错误

connection.on('error', function (err) { ... });

延迟回答,但如果要保持服务器运行,可以使用以下选项:

mongoose.connect('mongodb://localhost/dbname',function(err) {
    if (err)
        return console.error(err);
});

你可以使用很多猫鼬回调

//连接事件
//成功连接时
mongoose.connection.on('connected',function(){
log('Mongoose默认连接打开到'+dbURI');
}); 
//如果连接抛出错误
mongoose.connection.on('error',函数(err){
log('Mongoose默认连接错误:'+err);
}); 
//当连接断开时
mongoose.connection.on('disconnected',function(){
log(“Mongoose默认连接已断开”);
});
//如果节点进程结束,请关闭Mongoose连接
process.on('SIGINT',function(){
mongoose.connection.close(函数(){
log(“通过应用程序终止断开的Mongoose默认连接”);
进程退出(0);
}); 

}); 正如我们在mongoose文档中看到的,由于该方法返回承诺,因此承诺
catch
是用于mongoose连接的选项

因此,要处理初始连接错误,您应该使用
.catch()
try/catch
async/await

这样,我们有两种选择:

使用
.catch()
方法:

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true })
.catch(error => console.error(error));
try {
    await mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
} catch (error) {
    console.error(error);
}
或使用try/catch:

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true })
.catch(error => console.error(error));
try {
    await mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
} catch (error) {
    console.error(error);
}
嗯,我认为使用catch是一种更干净的方法。

  • 处理(捕获)连接异常
  • 处理其他连接错误
  • 成功连接时显示消息

如果我希望我的服务器在出现错误的情况下继续运行,该怎么办?到目前为止,我尝试的所有操作都会抛出错误,然后终止程序。@mongoose中的所有查询都会被缓冲,因此在重新连接到db时,所有查询都应该立即执行,这很好,不应该是未知状态的原因。这似乎不起作用。我可以向它提供一个错误的uri,err总是返回未定义的。错误来自connect()的Mongoose文档,该文档没有指定回调是可能的。这在较新的Mongoose版本(3.X)中不起作用。有关有效的解决方案,请参见Asta的答案。对于在这个问题上遇到障碍的任何人,
connection.on('error',function(err){…})
现在在3.X中实现。on error回调不再提供错误。这只是一个布尔值,表示为真。即使这样也不行!err的值只是“true”。没有对实际错误的描述。@amitavamozumder检查我关于如何使用catch和try/catch方法来处理错误的答案。在一个坏的连接上,我得到了
未处理的PromiserEjectionWarning:ReferenceError:handleError未定义
@staypuftman handleError是一个泛型方法,它根本不存在。我更新了我的问题来澄清这一点。明白了,我犯了个愚蠢的错误。这只是一个通用的
catch()
-感谢您的帮助clarification@valdeci谢谢,官方的猫鼬文件也提到了这一点。在这里,我仍然在寻找解决相同的堆栈溢出问题的方法。我觉得这是目前为止最好的