【问题标题】:How can I use PostgreSQL transactions in SailsJs?如何在 SailsJs 中使用 PostgreSQL 事务?
【发布时间】:2017-01-20 08:25:18
【问题描述】:

我的问题是我有一个复杂的查询链,如果其中有人失败,它会回滚。 我已经阅读了 Sails 中的事务,默认情况下,Sails 不支持事务,因为每个事务都与 Postgres 建立新连接,因此,一个查询有一个新连接。 那么,我如何在 Sails 中使用事务呢?

【问题讨论】:

    标签: node.js postgresql transactions sails.js sails-postgresql


    【解决方案1】:

    最简单的方法是通过pg-promise 支持的自动事务:

    db.tx(t=> {
        // - returning a value or a resolved promise will result in COMMIT
        // - returning a resolved promise or throwing an error will result in ROLLBACK
    })
        .then(data=> {
            // COMMIT has been executed
            // data  = data returned from the callback
        })
        .catch(error=> {
            // ROLLBACK has been executed
            // error = rejection reason or error thrown
        });
    

    但是您需要直接执行查询,而不是通过 Waterline,正如@zabware 所说:

    您将失去水线的灵活性,因为您的代码将不再与数据库无关。

    另见:Transactions

    【讨论】:

      【解决方案2】:

      目前,水线不支持交易。你可以在这里https://github.com/balderdashy/waterline/issues/755参与讨论。

      交易在路线图上,但预计不会在不久的将来:https://github.com/balderdashy/waterline/blob/master/ROADMAP.md#pending-proposals

      作为一种解决方法,您可以尝试https://github.com/Shyp/pg-transactions,但是您将失去水线的灵活性,因为您的代码将不再与数据库无关。

      同时检查Sails.js best practice in using transactions with promises (Postgres)Sails.js + Postgres: issue with transactions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 2011-03-22
        • 2018-02-11
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        相关资源
        最近更新 更多