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
评论区