后端数据库事务的用法
Cabloy提供了更便利的数据库事务
支持,下面我们看看在EggJS
和Cabloy
中,分别是如何支持数据库事务
的
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
时,会自动在上下文环境中保持同一个数据库连接,从而便利的支持数据库事务
评论: