node.js - Sails.js 的事务性 SQL

标签 node.js transactions sails.js waterline

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

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

我还想知道除了 Bookshelf 之外是否还有基于 Knex.js 的 ORM,因为我不喜欢 Backbones Model/Collection 系统?

最佳答案

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

关于node.js - Sails.js 的事务性 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794784/

相关文章:

mysql - 当有锁时等待读取一行——事务隔离

sql-server - 高效使用SQL事务

mysql - 没有锁表的 MySQL

javascript - 如何在主干 View 中创建内联编辑?

node.js - NodeJS Express Angular 提供完全独立于 SPA 的登录页面

node.js - Docker - 如何等待容器运行

android - 保护 Sails API

javascript - 如何使用 Sails 返回 Promise 中的两个对象?

reactjs - react + sails : Handling Routes

mysql - 如何限制Sequelize JS中belongsToMany关联的包含?