gpt4 book ai didi

node.js - 如何处理 Mongoose DB 连接中断

转载 作者:IT老高 更新时间:2023-10-28 13:11:49 39 4
gpt4 key购买 nike

我一直在评估 Mongoose(node.js 的 ORM,它使用 MongoDB 进行持久存储)。

我想做的是确保应用程序启动时DB未启动时应用程序可以运行,并且还可以智能地处理DB下降。

目前我的测试应用程序在这两种情况下都不起作用:

var mongoose_connection = mongoose.createConnection(DATABASE_URL, {server:{poolSize:4}});

然后我在制作模型时使用该连接。

如果数据库在应用程序启动时关闭,那么对实例的任何 save() 调用都会静默失败,不会出现错误。如果数据库恢复,它们永远不会被写入。

所以我需要检测到从未发生过连接,并让应用程序能够在运行时告诉它,以便我能以某种方式处理它。

当应用程序启动后数据库出现故障时,虽然 save() 调用仍然不会导致错误,但它们会排队并在数据库返回时写入。

这似乎很好,除了我想挂接到 API 以在数据库关闭时获取事件并查询排队的保存数量。在某些时候,我可能有太多排队的事件,以至于我只想停止制作新事件并让应用程序退出。

最佳答案

案例 #1:db 在应用程序启动时关闭。有一个小错误阻止了我现在正在修复的这个用例。但是,这是解决方法:

var db = mongoose.createConnection();
db.on('error', function (err) {
if (err) // couldn't connect

// hack the driver to allow re-opening after initial network error
db.db.close();

// retry if desired
connect();
});

function connect () {
db.open('localhost', 'dbname');
}

connect();

https://gist.github.com/2878607

一个丑陋但有效的要点。首先关闭 mongo,然后运行这个 gist。

注意连接失败。

然后启动 mongo 并查看所有排队的插入完成并转储到控制台。将开始写入和查找。

关闭 mongo,注意插入和查找正在尝试,但没有执行回调。

重启mongo。注意所有排队的插入和查找都已完成。

关于node.js - 如何处理 Mongoose DB 连接中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873199/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com