前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >egg中 controller 调用controller如何实现

egg中 controller 调用controller如何实现

作者头像
吴裕超
发布2020-10-28 10:23:32
2.2K0
发布2020-10-28 10:23:32
举报
文章被收录于专栏:吴裕超

问题描述:

controller部分有很多复用的功能,举个栗子,2个创建项目的页面,都是用同一套增删改查,只是新建的时候传的类型不一样,这时候就会出现2个一样的controller代码。只是传参不一致。

解决方法:

在controller里面新建一个common文件夹,

编写common/project.js 参考官网示例,将公共代码提取进去,注意类命名

代码语言:javascript
复制
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,否则会陷入死循环。

代码语言:javascript
复制
'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就完成了!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档