Я структурировал свой NodeJS проект следующим образом: в approutes.js
я обработал все клиентские запросы. И загрузите в него контроллеры.
approutes. js
var store_entry_controller = require('../controllers/storeEntryController');
app.route('/add_new_store_entry')
.post(store_entry_controller.add_new_store_entry)
In storeEntryController.js
Я импортировал storeEntryModel.js
для выполнения функций модели
storeEntryController. js
var StoreEntry= require('../models/storeEntryModel.js');
exports.add_new_store_entry = function(req,res){
var new_store_entry = new StoreEntry(req.body);
new_store_entry.starting_amount=new_store_entry.remain_amount;
StoreEntry.addNewStoreEntry(new_store_entry,function(err,storeEntry){
if(err){
res.send(err);
}else{
res.send(storeEntry);
};
})
};
storeEntryModel. js
в storeEntryModel.js
, где мне нужно подать заявку MySQL транзакций (sql.beginTransaction
- sql.rollback
и sql.commit
) Я импортировал другую модель, которая CashDetail.js
. Для выполнения другой транзакции sql при первом выполнении запроса без ошибок. Я делаю это так.
var sql = require('./db.js');
//CashDetailModel contains the second query that should be executed on success of the first queryy
var CashDetailModel = require('./CashDetailModel.js');
StoreEntry.addNewStoreEntry = function (entry_details,result){
// START TRANSACTIONS
sql.beginTransaction(function(err){
if (err) { throw err; }
sql.query('INSERT INTO store_entry SET ?',entry_details, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
//IMOPRTING ANOTHER FUNCTION FORM ANOTHER MODAL.
CashDetailModel.addCashDetails(entry_details,function(err,cashDetails){
})
}
})
})
}
CashDetailModel. js
Это еще один модал, где мне нужно импортировать его и вызвать функцию в storeEntryModel.js
.
Я запутался, если sql.commit
и sql.rollback
должны быть в этом модальном или storeEntryModel
CashDetail.addCashDetails= function(cashDetails,result){
sql.query('INSERT INTO cash_details SET ?',cashDetails, function(err,res){
if(err){
sql.rollback(function() {
throw err;
});
}else{
sql.commit(function(err) {
if (err) {
sql.rollback(function() {
throw err;
});
}
sql.end();
});
}
})
console.log('********************** cashDetails ************************');
console.log(cashDetails);
}
Проблема
Я запутался, как применить MySQL transactions
, когда вторые запросы импортируются из другого модального режима. установить код sql.rollback
и sql.commit
в импортированном модале, содержащем второй запрос, или в первом модале внутри sql.beginTransaction
?