Optional INSERT-Anweisung in der Transaktionskette mit NodeJS und Postgres
Ich erstelle eine einfache Webapp mit NodeJS / Postgres das muss 3 Einfügungen in der Datenbank machen.
Zur Steuerung der Anweisungskette, die ich verwende pg-transaction.
Mein Problem ist, dass ich immer die 2 ersten INSERTS ausführen muss, aber ich habe eine Bedingung, um die 3. auszuführen.
Vielleicht könnte mein Code besser erstellt werden (Vorschläge sind willkommen).
Hier ist ein Pseudocode:
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!");
});
}
});
});
}
Es scheint so hässlich, dreimal das gleiche zu wiederholenif (err) {} nach jeder Abfrage.
Versuche einige Optionen zu überprüfen, die ich gefunden habe Sequelize, konnte aber keinen Weg finden, um dieses Problem damit zu lösen.
Alle Vorschläge sind willkommen!
Vielen Dank