node.js:创build一个覆盖对多个存储库的调用的事务

我习惯于使用C#编写代码,有时我创build的事务对不同的存储库有多个调用,如果调用失败,则回滚覆盖每个存储库。

代码是这样的:

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

这确保了如果在bookRepository上发生错误,删除的项目将在回滚中。

现在,我正在尝试使用node.js来做同样的事情。 我find了可以创build事务的mssql软件包,但是只在仓库里面,像这样:

 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."); }); }); }); 

那么,有什么办法可以在服务上创build一个包含我描述的多个存储库的事务?

您可以使用名为Sequelize的美丽框架来创build事务作用域。 如果您查看与交易相关的页面,则可以find一种将交易传递给所有查询的方法。

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