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