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.configthis.configin 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
评论区