У меня есть какая-то транзакция в узле js, первая - это выбор данных из таблицы mysql (таблица: клиенты), вторая - вставка данных в таблицу mysql (таблица: клиенты), третья - отправка данных и сохранение с использованием restfull API. и последнее - вставка данных в таблицу mysql (таблица: generate_spks), я хочу применить откат в моем узле js.
Я пробовал вот так, но если последняя транзакция завершилась неудачно (вставка в таблицу generate_spks), данные, которые я отправляю и сохраняю с помощью API restfull, сохраняются (все еще работают), даже если они не должны отправляться, потому что последняя транзакция не удалась.
Я пробовал, как эта ссылка https://github.com/mysqljs/mysql#transactions
это мой db.js
var mysql = require("mysql");
function Connection() {
this.pool = null;
var konek = {
host: '19*.16*.**.***',
user: 'my_user',
password: 'my_password',
database: 'my_database'
};
this.init = function() {
this.pool = mysql.createPool(konek);
}
this.acquire = function(callback) {
this.init();
this.pool.getConnection(function(err, connection) {
callback(err, connection);
});
};
}
module.exports = new Connection();
, и это мой controller
var connection = require('../../config/db');
function Todo() {
this.insertSpkBranchNo = function(req, res, next) {
var id = uuidv1();
var cust_code = 'C-0001'
var cust_nama = req.body.cust_nama;
var cust_noktp = req.body.cust_noktp;
var cust_kk = req.body.cust_kk;
var created = new Date();
var modified = new Date();
connection.acquire(function(err, con) {
con.beginTransaction(function(){
con.query('SELECT cust_code FROM customers ORDER BY cust_code desc LIMIT 1', function(err, result){
if (err) {
con.rollback(function(){
console.log(err);
res.send({ status: 400, message: 'Select Customer Code Failed' });
});
}
con.query('INSERT INTO customers (id,cust_code,cust_nama,cust_noktp,cust_kk,created,modified) VALUES (?,?,?,?,?,?,?)', [id,cust_code,cust_nama,cust_noktp,cust_kitas,created,modified], function(err, result) {
if (err) {
con.rollback(function(){
console.log(err);
return res.send({ status: 400, message: 'Insert Customer Failed' });
});
}
var url = 'http://45.**.***.***/api-dev/api_insert_customer.php';
var requestData = {
id:id,
cust_code:cust_code,
cust_nama:cust_nama,
cust_noktp:cust_noktp,
created:created,
modified:modified,
cust_kk:cust_kk,
}
var data = {
url: url,
auth: {
bearer: '71D55F99*****'
},
json: true,
form: requestData,
rejectUnauthorized: false, //add when working with https sites
requestCert: false, //add when working with https sites
agent: false, //add when working with https sites
}
request.post(data, function(err, httpResponse, body) {
if (body.status == "0") {
con.rollback(function(){
console.log(err);
return res.send({ status: 400, message: 'Send customer to dms Failed' });
});
}
var id = uuidv1();
var id_customer = req.body.id_customer;
var cust_nama = req.body.cust_nama;
var cust_alamat = req.body.cust_alamat;
var cust_hp = req.body.cust_hp;
var cust_telp = req.body.cust_telp;
var cust_npwp = req.body.cust_npwp;
con.query('INSERT INTO generate_spks (id, id_customer, cust_nama, cust_alamat, cust_hp, cust_telp, cust_npwp) VALUES (?,?,?,?,?,?,?)', [id, id_customer, cust_nama, cust_alamat, cust_hp, cust_telp, cust_npwp], function(err, result) {
if (err) {
con.rollback(function(){
console.log(err);
return res.json({ status: 400, message: 'Insert spk failed' });
});
}
con.commit(function(err) {
if (err) {
con.rollback(function() {
console.log(err);
return res.json({ status: 400, message: 'Commit failed' });
});
} else {
return res.json({ status: 200, message: 'success' });
}
});
});
});
});
});
});
console.log('Transaction Complete.');
con.end();
});
};
}
module.exports = new Todo();
Я хочу, если последняя транзакция (вставка в таблицу generate_spks) не удалась,третья транзакция (с использованием restfull API) не будет сохранена.
Мой код неверен? любая помощь ценится. Спасибо ..