侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

Egg04 - Egg.js 扩展的六个基本对象

barwe
2022-04-16 / 0 评论 / 0 点赞 / 763 阅读 / 1,449 字
温馨提示:
本文最后更新于 2022-04-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Egg.js 扩展的对象有:

  • Controller:控制器负责接收和响应用户请求
  • Service:负责处理请求的业务逻辑
  • Helper:提供使用的工具函数
  • Config:全局配置对象
  • Logger:提供日志功能
  • Subscription:订阅模型

Controller

Controller 负责接收和响应用户请求,理论上不包含具体的业务逻辑。

一个 Controller 对象有五个基本属性:

  • ctx: 当前请求的 Context 实例
  • app: 当前应用的 Application 实例
  • config: 应用的配置信息
  • service: 应用所有的 Service 实例集合
  • logger: 为当前 Controller 封装的 Logger 对象

定义一个 Controller 的方法:

import { Controller } from 'egg'

export default class UserController extends Controller {}

Service

Service 对象负责处理请求的业务逻辑。

Service 对象的属性与 Controller 对象一致:ctx, app, config, service and logger

定义一个 Service 对象:

import { Service } from 'egg'

export default class UserService extends Service {}

Helper

Helper 提供使用函数,会在每次请求中实例化,因此每个 Helper 的成员函数也可以获取当前请求的上下文对象。

Helper 对象的基本属性与 Controller 一致:ctx, app, config, service and logger

Helper 对象的获取方式:ctx.helper

扩展 Helper 对象的成员:

export default {
  formatUser(user) {
    return `${user.name} ${user.age}`
  }
}

Config

配置和代码应该分离,硬编码需要放在配置文件中。

不同环境可以定义不同的配置文件,应用启动时根据环境自动加载对应配置文件。

应用的配置对象获取方法:

  • app.config
  • this.config in Controller, Service and Helper instance

Logger

每个 Logger 对象都提供了四个日志打印函数:

  • logger.debug()
  • logger.info()
  • logger.warn()
  • logger.error()

不同的框架对象会实例化自己的日志对象。

Application Logger

打印应用级别的日志,一般被框架和插件使用,框架的使用者不需要使用应用级别的日志对象。

通过 app.coreLogger 获取应用的日志对象。

Context Logger

通过 ctx.logger 从 Context 对象上获取日志对象。

Context 是与请求相关的对象,因此它打印的消息会附带上请求相关的信息,例如 URL。

Context CoreLogger

通过 ctx.coreLogger 获取,一般被框架和插件使用,框架用户不需要使用这个。

Controller/Service Logger

通过 this.logger 获取,它差不多相当于 this.ctx.logger 对象,还会添加当前 Controller/Service 的文件位置信息。


Subscription

规范订阅模型的基类。


参考资料

http://www.wangchonghaha.cn/bookstact/JsServer/Eggjs/objects.html#controller

0

评论区