NodeJS/Postgresを使用してデータベースに3つの挿入を行う必要がある単純なWebアプリケーションを構築しています。NodeJSとPostgresを使用したトランザクションチェーン内のオプションのINSERTステートメント
私はpg-transactionを使用しているステートメントのチェーンを制御します。
私の問題は、常に2番目のINSERTを実行する必要がありますが、3番目のINSERTを実行する条件があることです。
多分、私のコードをより良い方法でビルドすることができます(提案は大歓迎です)。各クエリの後(ERR){}場合は三回同じを繰り返すように醜いと思わ
function(req, res) {
var tx = new Transaction(client);
tx.on('error', die);
tx.begin();
tx.query('INSERT_1 VALUES(...) RETURNING id', paramValues, function(err, result) {
if (err) {
tx.rollback();
res.send("Something was wrong!");
return;
}
var paramValues2 = result.rows[0].id;
tx.query('INSERT_2 VALUES(...)', paramValues2, function(err2, result2) {
if (err) {
tx.rollback();
res.send("Something was wrong!");
return;
}
// HERE'S THE PROBLEM (I don't want to run it always this last statement)
// If I don't run it, I will miss tx.commit()
if (req.body.value != null) {
tx.query('INSERT_3 VALUES(...)', paramValues3, function(err3, result3) {
if (err) {
tx.rollback();
res.send("Something was wrong!");
return;
}
tx.commit();
res.send("Everything fine!");
});
}
});
});
}
:ここ
は擬似コードです。
私が見つけたいくつかのオプションを確認しようとしましたを続行しましたが、この問題を解決する方法が見当たりませんでした。
ご提案は大歓迎です!
ありがとうございます!
あなたが最後の挿入にそれがあることを確認しています'' INSERT_3 VALUES(...) '、paramValues2'ではなく、 '' INSERT_3 VALUES(...)' '、paramValues3'の中のいくつかではありませんか?つまり、最初のクエリの結果を使用して最後のクエリを実行する必要がありますか? –