带有Sails.js的事务SQL

rya*_*zec 12 transactions node.js sails.js waterline

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

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

我还想知道除了Bookshelf之外是否还有一个基于Knex.js构建的ORM,因为我不是Backbones Model/Collection系统的粉丝?

Fra*_*tto 17

您仍然可以直接使用编写SQL查询Model.query().由于这是一个异步函数,因此您必须使用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);
});
Run Code Online (Sandbox Code Playgroud)


mik*_*eil 6

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

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