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

EggJS

  1. 1const conn = await app.mysql.beginTransaction(); // 初始化事务
  2. 2
  3. 3try {
  4. 4 await conn.insert(table, row1); // 第一步操作
  5. 5 await conn.update(table, row2); // 第二步操作
  6. 6 await conn.commit(); // 提交事务
  7. 7} catch (err) {
  8. 8 // error, rollback
  9. 9 await conn.rollback(); // 一定记得捕获异常后回滚事务!!
  10. 10 throw err;
  11. 11}

CabloyJS

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

src/suite-vendor/test-party/modules/test-party/backend/src/routes.js

  1. 1// test
  2. 2{ method: 'post', path: 'kitchen-sink/guide/echo8', controller: 'testKitchensinkGuide', middlewares: 'transaction' },

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