egg中 controller 調用controller如何實現

問題描述:

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就完成了!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章