2

私の問題は、複雑なクエリチェーンがあり、このトランザクションの誰かが失敗した場合にロールバックが行われることです。 私はSailsのトランザクションについて読んだことがあります。デフォルトでは、各トランザクションがPostgresとの新しい接続を行うため、Sailsはトランザクションをサポートしていません。 それでは、Sailsとの取引をどのように使用できますか?SailsJでPostgreSQLトランザクションを使用するにはどうしたらいいですか?

答えて

1

現在、ウォーターラインでの取引はサポートされていません。ここにディスカッションに参加することができます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

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 
    }); 

しかし、あなたはありませんウォーターラインを通じて、直接クエリを実行する必要があるだろう、と@zabwareなど言った:

あなたのコードはデータベースにとらわれないため、水の柔軟性が失われます。それ以上。

も参照してください:Transactions