Я создаю простое веб-приложение с использованием NodeJS/Postgres, которому нужно сделать 3 вставки в базу данных.
Для управления цепочкой операторов я использую pg-transaction.
Моя проблема в том, что я должен всегда запускать 2 первых INSERTS, но у меня есть условие для запуска 3-го.
Возможно, мой код можно было бы построить лучше (предложения приветствуются).
Вот псевдокод:
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 always run 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!");
});
}
});
});
}
Выглядит так некрасиво трижды повторять одно и то же if (err) {} после каждого запроса.
Пытаясь проверить некоторые параметры, я нашел Sequelize, но не нашел способа решить эту проблему с его помощью.
Любые предложения приветствуются!
Спасибо!
'INSERT_3 VALUES(...)', paramValues2
, а не какой-то'INSERT_3 VALUES(...)', paramValues3
? то есть вам нужно использовать результат первого запроса, чтобы сделать последний? - person vitaly-t   schedule 05.05.2016