在此Mongoose 的 GitHub 问题开发人员表示,如果与 MongoDB 的初始数据库连接失败,则会导致 Node.js 进程崩溃。它会执行此操作,而不是尝试重新连接。
在我的代码中我捕获了这个错误因为我想记录它。
var mongooseOptions = {
useMongoClient: true,
reconnectInterval: 10000,
reconnectTries: Number.MAX_VALUE
};
mongoose.connect(connectionString, mongooseOptions)
.catch(err => {
logger.error('Mongodb first connection failed: ' + err.stack);
// what to do here? - process.exit(0); maybe?
});
但在那之后,最好的做法是什么?使进程崩溃?还是编写我自己的重新连接逻辑?我可能应该提到,这mongodb.service
是启动的必要条件node.service
(在 Linux 中使用 systemd)。
[Unit]
After=mongodb.service
...
我也不确定这种情况发生的频率是多少。
我也用过本指南但我找不到明确的答案。
答案1
我也在寻找您问题的答案。到目前为止,在我的搜索中,我认为调用 process.exit 可能是最好的方法。因为 Mongoose 允许您立即开始使用模型,而无需等待 mongoose 建立与 MongoDB 的连接。这是因为 mongoose 在内部缓冲模型函数调用。
从 Mongoose 5.0.10 开始 - 如果您使用未连接的模型,Mongoose 默认不会抛出任何错误。
如果您的连接无法重新连接,那么您的应用程序会认为它正在通过缓冲区执行模型操作,而事实上它会失败。
我见过开发人员添加这样的额外 Mongodb URI:
mongoose.connect(URI1||URI2);
最终,您将希望确保您的应用程序始终能够连接到数据库,而不是徒劳地将模型函数执行到缓冲区中。
有一个选项可以禁用缓冲,但我不确定这会如何影响性能。