2016-07-01 6 views
4

Ich bin es gewohnt, mit C# zu codieren, und manchmal erstelle ich Transaktionen, die mehr als einen Aufruf an verschiedene Repositorys haben, und wenn ein Aufruf fehlschlägt, das Rollback umfasst jedes Repository.node.js: Erstellen einer Transaktion, die Aufrufe an mehr als ein Repository abdeckt

Der Code ist wie folgt:

using (var scope = new TransactionScope()) 
{ 
    itemRepository.deleteItems(items); 
    bookRepository.deleteBooks(books); 
    scope.Complete(); 
} 

Dies stellt sicher, dass, wenn ein Fehler auf bookRepository auftritt, werden die gelöschten Elemente auf der Rollback sein.

Jetzt versuche ich das gleiche mit node.js zu tun. Ich fand das mssql-Paket, das die Möglichkeit hat, Transaktionen zu schaffen, sondern nur innerhalb des Repository, wie folgt aus:

var transaction = new sql.Transaction(/* [connection] */); 
transaction.begin(function(err) { 
// ... error checks 

var request = new sql.Request(transaction); 
    request.query('insert into mytable (mycolumn) values (12345)', function(err, recordset) { 
     // ... error checks 

     transaction.commit(function(err, recordset) { 
      // ... error checks 

      console.log("Transaction committed."); 
     }); 
    }); 
}); 

es so, dann ist eine Möglichkeit, eine Transaktion auf dem Dienst zu erstellen, die mehr als ein Repository wie ich bedeckt beschrieben?

+0

Ich suche eine ähnliche Antwort für mysql + node –

Antwort

1

Sie können einen Transaktionsbereich mit einem schönen Rahmen namens Sequelize erstellen. Wenn Sie die Seite relativ zu transactions betrachten, können Sie eine Möglichkeit finden, eine Transaktion an alle Abfragen zu übergeben.

sequelize.transaction(function (t1) { 
    // With CLS enabled, the user will be created inside the transaction 
    return User.create({ name: 'Alice' }); 
});