[Egg.js] egg-tx 接口級事務管理插件

egg-tx

npm download

一個 egg 事務插件,它支持 Mysql、Mongo 數據庫,它能作到請求接口級別的事務管理。mysql

依賴的插件

  • 對於使用 Mysql 數據庫你須要開啓 egg-sequelize 插件。
  • 對於使用 Mongo 數據庫你須要開啓 egg-mongoose 插件。

安裝

$ npm i egg-tx --save
複製代碼

開啓插件

// {app_root}/config/plugin.js
exports.tx = {
  enable: true,
  package: 'egg-tx',
};
複製代碼

配置

// {app_root}/config/config.default.js
exports.tx = {
    reqAction:['POST','PUT','DELETE'], 
    dbType:'mysql'
};
複製代碼
  • reqAction:將爲指定動做的全部請求進行事務管理,該數組的值可爲 GET、POST、PUT、DELETE、HEAD、PATCH、OPTIONS(默認值爲 POST、PUT、DELETE)
  • dbType:所使用的數據庫類型,該值可爲 mysql 或 mongo (默認值爲 mysql)

使用例子

你能夠經過 ctx.tx.session 獲取到本次請求的事務會話對象,前提是它已經被事務管理器所管理。git

mysql
await this.ctx.model.User.create(user, {
    transaction: this.ctx.tx.session,
});
複製代碼
mongo
await this.ctx.model.User.insertMany([
  { username: 'lyTongXue', password: '123456' },
], { session: this.ctx.tx.session });
複製代碼

註解

@tx

使用該註解的接口方法將會進行事務管理,即使 reqAction 配置項中未包含該動做類型的請求。github

// {app_root}/app/controller/{controller_name}.js
/** * @tx */
async create(){
}
複製代碼
@txIgnore

即使 reqAction 配置項中包含了該動做類型的請求,使用了該註解的接口方法將不會進行事務管理。sql

// {app_root}/app/controller/{controller_name}.js
/** * @txIgnore */
async index(){
}
複製代碼

提問交流

一、接口方法的 jsDoc 是否有必定要求?數據庫

  • jsDoc 必需要與方法"緊挨着",如:
// --- 正確寫法

/** * @TX */
async create(){
}

// --- 錯誤寫法

/** * @TX */


async create(){
}
複製代碼

請到 egg issues 異步交流。npm

License

MIT數組

相關文章
相關標籤/搜索