[Egg.js] egg-tx 介面級事務管理外掛
阿新 • • 發佈:2019-12-31
egg-tx
一個 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 非同步交流。