1. 程式人生 > 程式設計 >[Egg.js] egg-tx 介面級事務管理外掛

[Egg.js] egg-tx 介面級事務管理外掛

egg-tx

npm download

一個 egg 事務外掛,它支援 Mysql、Mongo 資料庫,它能做到請求介面級別的事務管理。

依賴的外掛

  • 對於使用 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 獲取到本次請求的事務會話物件,前提是它已經被事務管理器所管理。

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 配置項中未包含該動作型別的請求。

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

即便 reqAction 配置項中包含了該動作型別的請求,使用了該註解的介面方法將不會進行事務管理。

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

提問交流

1、介面方法的 jsDoc 是否有一定要求?

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

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

// --- 錯誤寫法

/**
* @TX
*/


async create(){
}
複製程式碼

請到 egg issues 非同步交流。

License

MIT