在 Mongoose 中处理“MongoError:首次连接时无法连接到服务器”的最佳方法

在 Mongoose 中处理“MongoError:首次连接时无法连接到服务器”的最佳方法

在此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);

最终,您将希望确保您的应用程序始终能够连接到数据库,而不是徒劳地将模型函数执行到缓冲区中。

有一个选项可以禁用缓冲,但我不确定这会如何影响性能。

相关内容