Как использовать MySQL транзакций в NodeJS? - PullRequest
0 голосов
/ 24 апреля 2020

Я структурировал свой 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...