問題描述:
controller部分有很多復用的功能,舉個栗子,2個創建項目的頁面,都是用同一套增刪改查,只是新建的時候傳的類型不一樣,這時候就會出現2個一樣的controller代碼。只是傳參不一致。
解決方法:
在controller里面新建一個common文件夾,

編寫common/project.js 參考官網示例,將公共代碼提取進去,注意類命名
const { Controller } = require('egg');
class BaseController extends Controller {
get user() {
return this.ctx.session.user;
}
success(data) {
this.ctx.body = {
success: true,
data,
};
}
notFound(msg) {
msg = msg || 'not found';
this.ctx.throw(404, msg);
}
async save(busType) {
const reqAppidRes = await
service.common.project.addReqAppid({
id,
appid: serviceRes.data.intappid,
appidStr: serviceRes.data.appid,
type: busType,
createTime: ~~(Date.now() / 1000),
});
}
}
module.exports = BaseController;
編寫業務文件夾liveSDK 、sms 內的project.js,引入公共controller,並把它作為父類,這樣就可以用this.xxx獲取父類中的方法。
注意:方法名不能和父類重名,比如下面代碼中的add不能叫save,否則會陷入死循環。
'use strict'; const Controller = require('../common/project'); const BUS_TYPE = 2; class SDKProjectController extends Controller {/** * 新增項目 */ async add() { return await this.save(BUS_TYPE); } } module.exports = SDKProjectController;
到這里,controller調用公共controller就完成了!
