Node.js / Mongoose - 错误时撤消数据库修改

2024-01-11

我有一个相当复杂的express路线在我的node.js服务器,通过以下方式对数据库进行许多修改mongoose.

我的目标是实现一种机制,在发生任何错误时恢复所有更改。我的想法是实现撤销功能catch block.

但这是相当难看的,因为我必须知道以前的值是什么以及如果错误发生在catch堵塞?当在执行期间发生错误时,恢复这些更改尤其困难Promise.all(array.map( /* ... */ ))


我的路线类似于:

module.exports = (req, res) => {

    var arr1, var2, var3

    try {

        const body = req.body

        arr1 = await fetchVar1(body)
        const _data = await Promise.all([
            Promise.all(
                arr1.map(async x => {
                    const y = await fetchSometing(x)
                    return doSometing(y)
                })
            ),
            doSomething3(arr1),
        ])
        var2 = _data[1]
        var3 = _data[2]

        return res.json({ arr1, var2, var3 })

    } catch (err) {

        /**
         * If an error occurs I have to undo
         * everything that has been done
         * in the try block
         */

    }
}

最好我想实现一些“批处理”所有更改并在没有发生错误的情况下“提交”更改的方法。


您正在寻找的是交易:https://mongoosejs.com/docs/transactions.html https://mongoosejs.com/docs/transactions.html

完成操作后手动撤消它们并不能保护您免受所有问题的影响,因此您不应依赖于此。例如,正如您所写:如果部分写入后发生崩溃(某些数据被写入,某些数据未写入),然后在“回滚”代码期间再次崩溃(这不会清除所有内容),会发生什么情况?如果你的代码依赖于你的数据绝对干净,那么你就有问题了。您的代码应该能够正确处理部分数据,或者您必须有某种方法来保证您的数据始终完美无缺。

事务是可行的方法,因为只有在一切正常的情况下它才会立即提交所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js / Mongoose - 错误时撤消数据库修改 的相关文章

随机推荐