Node.js:如何处理MongoDB写错误?

时间:2016-10-12 18:37:18

标签: node.js mongodb mongoose database-connection

如何处理MongoDB写入错误(由于 Mongo连接丢弃)?因为我必须对多个文档进行更新,所以基本上它需要是事务性的,“什么都不是”方法。我以为我可以捕获错误并在其中一个更新失败时还原插入的数据。但是如果MongoDB连接丢失,它会被应用程序的“ uncaughtException ”直接捕获。那么我该如何处理这种情况呢?我需要的是多文档更新中的“Nothing or All”。

1 个答案:

答案 0 :(得分:0)

MongoDB中不存在交易。有一些解决方法,例如the one @Alex-Blex posted in the comments,您可以在其中进行两阶段提交以逐步执行更新。 (这有点用词不当;他们的例子有七个db操作。)

  

如果MongoDB连接断开,它会被" uncaughtException"直接捕获。申请

您可以通过disconnectederror事件连接来监听此事:

mongoose.connection.on("disconnected", function () {
    // Lost connection to database
});
mongoose.connection.on("reconnected", ...);

通常这些听众都是应用程序范围的,但我想你可以在你的"事务"的生命周期中设置一个。您必须等待reconnected,然后重试/恢复您的数据库操作。在任何情况下,您仍然会依赖您的申请,以便在整个交易期间因任何原因而崩溃。"

如果您需要交易可靠,可能需要查看另一个数据库。