后端数据库事务的用法

2018-11-20 12:52:18

Cabloy提供了更便利的数据库事务支持,下面我们看看在EggJSCabloy中,分别是如何支持数据库事务

EggJS

const conn = await app.mysql.beginTransaction(); // 初始化事务

try {
  await conn.insert(table, row1);  // 第一步操作
  await conn.update(table, row2);  // 第二步操作
  await conn.commit(); // 提交事务
} catch (err) {
  // error, rollback
  await conn.rollback(); // 一定记得捕获异常后回滚事务!!
  throw err;
}

Cabloy

在Cabloy中,访问数据库相关的代码不用做任何变更,仅需在API路由上声明启用中间件transaction即可

src/module/test-todo/backend/src/routes.js

// test
- { method: 'post', path: 'test/echo', controller: test },
+ { method: 'post', path: 'test/echo', controller: test, middlewares: 'transaction' },

不论使用ctx.db对象还是model对象操作数据库,当开启中间件transaction时,会自动在上下文环境中保持同一个数据库连接,从而便利的支持数据库事务



评论: