与Sails.js交易SQL

所以我现在一直在玩NodeJS / Express,我真的想用一个完整的JavaScript栈来重写一个相对较大的项目,看它是如何工作的。 Sails.js似乎是一个REST API的NodeJS后端的一个非常好的select,支持Web套接字,这正是我正在寻找的,但是我正在寻找解决的另一个问题,那就是NodeJS中的事务性SQL。

我在NodeJS方面看到的大多数数据层/ orms在处理MySQL时似乎并不支持事务。 Sails.js(Waterline)提供的ORM似乎也不支持交易,这很奇怪,因为我已经看到了提到它的地方,尽pipe这些评论是相当古老的。 Knex.js支持事务,所以我想知道是否很容易用这个(或者如果Sails.js假设Waterline在核心框架中)replaceORM是Sails.js。

我还想知道,除了书架之外,是否还有一个build立在Knex.js之上的ORM,因为我不是Backbone模型/收集系统的粉丝?

您仍然可以使用Model.query()直接编写SQL查询。 由于这是一个asynchronous函数,所以必须使用promises或者async来重新序列化它。 例如,使用MySQL适配器, async和一个名为User的模型:

 async.auto({ transaction: function(next){ User.query('BEGIN', next); }, user: ['transaction', function(next) { User.findOne(req.param('id')).exec(next); }], // other queries in the transaction // ... }, function(err, results) { if (err) { User.query('ROLLBACK', next); return next(err); } User.query('COMMIT', next); // final tasks res.json(results.serialize); }); 

我们正在为ORM级别的事务提供原生支持: https : //github.com/balderdashy/waterline/issues/62

协会可能会第一,但交易是下一个。 我们刚刚完成了GROUP BY和聚合(SUM,AVG等)

SailsJS的交易结果比预期的要复杂得多。 目标是让ORM适配器知道模型上的两个完全不同的控制器动作将通过单个MySQL连接发送。

做这件事的自然方法是写两个新的适配器,它接受一个额外的信息来表明一个查询属于一个事务调用。 这样做需要改变waterline (ORM抽象模块)本身。

签出,如果这有帮助 – https://www.npmjs.com/package/sails-mysql-transactions