返回

Egg.js 中控制器基类的简明用法

前端

前言

Egg.js 是一个 Node.js 框架,它采用了一系列设计理念来帮助开发者快速构建高性能、高可用、易扩展的 web 应用。其中,控制器基类是一种强大的特性,它允许开发者为控制器指定通用的行为,从而减少代码重复,提升开发效率。

一、控制器基类的作用

控制器基类是一种特殊的类,它可以被其他控制器继承,从而实现代码复用。开发者可以将通用的行为,例如参数验证、权限控制等,封装在基类中,然后由其他控制器继承这些行为。

二、创建控制器基类

要创建控制器基类,需要在 app 文件夹下创建一个新的文件夹 core,并在其中新建一个 base.js 文件。

// app/core/base.js
module.exports = {
  // 通用的行为
};

三、继承控制器基类

要让一个控制器继承基类,需要在控制器的 constructor 函数中使用 super() 方法。

// app/controller/home.js
const BaseController = require('../core/base');

class HomeController extends BaseController {
  // 控制器的方法
}

四、封装方法

开发者可以在基类中封装一些常用的方法,例如:

// app/core/base.js
module.exports = {
  async verifyParams(ctx) {
    // 参数验证
  },
  async checkPermission(ctx) {
    // 权限控制
  }
};

五、使用封装方法

其他控制器可以通过继承基类来使用这些封装方法。

// app/controller/home.js
class HomeController extends BaseController {
  async index() {
    await this.verifyParams();
    await this.checkPermission();
    // 控制器的方法
  }
}

六、扩展基类

开发者还可以扩展基类,为其添加新的方法。

// app/core/base.js
const BaseController = require('./base');

class NewBaseController extends BaseController {
  // 新的方法
}

七、使用扩展基类

其他控制器可以通过继承扩展基类来使用新的方法。

// app/controller/home.js
class HomeController extends NewBaseController {
  // 控制器的方法
}

结论

使用控制器基类可以极大地提升 Egg.js 应用的代码可重用性和可维护性。开发者可以通过封装通用的行为到基类中,然后由其他控制器继承这些行为,从而减少重复代码,提升开发效率。此外,开发者还可以扩展基类,为其添加新的方法,从而满足不同场景的需要。