Use when creating API endpoints, implementing protocol handlers, exposing interfaces for specific clients, adding parameter validation, or applying middleware to controllers. Covers HTTP, MCP and Schedule controllers, Ajv/TypeBox parameter validation, and Middleware (function-style and AOP) for EGG framework applications.
需要暴露什么接口/客户端协议?
1. HTTP 接口?例如 HTML/JSON/SSR/SSE,可以使用 HTTPController,参考 `references/http-controller.md`
2. 定时任务,可以使用 Schedule,参考 `references/schedule.md`
3. MCP 接口,可以使用 MCPController,参考 `references/mcp-controller.md`
需要做参数校验?
4. 使用 Ajv + TypeBox 做入参校验,参考 `references/ajv-validate.md`
需要给控制器加中间件(日志、鉴权、耗时统计等横切逻辑)?
5. 使用 Middleware,支持函数式写法和 AOP 写法,参考 `references/middleware.md`
@HTTPController、@HTTPMethod@HTTPParam、@HTTPQuery、@HTTPBody、@HTTPHeaders、@Cookies、@Request、@Contextreferences/http-controller.md@MCPController、@MCPTool、@MCPPrompt、@MCPResourcereferences/mcp-controller.md@Schedule<T>references/schedule.mdimport { Ajv, Type, Static } from 'egg/ajv'@Inject() ajv: Ajv,调用 ajv.validate(schema, data)references/ajv-validate.mdimport { Middleware } from 'egg'(AOP 类从 import { Advice } from 'egg/aop')@Middleware() 应用@Middleware() 中混用references/middleware.md| 现象 | 原因 | 解决方案 |
|---|---|---|
| MCP 装饰器 import 报错 | 从 'egg' 导入 | MCP 装饰器从 '@eggjs/tegg' 导入,zod 从 '@eggjs/tegg/zod' 导入 |
| MCP Schema 报错 | 用了 z.object() 包装 | 直接用普通对象 { name: z.string() } |
| 定时任务不生效 | 放在 app/schedule 目录 | 放在模块目录中,避免和 egg 默认扫描冲突 |
| Ajv 校验 import 报错 | 从 typebox 或 ajv 导入 | 统一从 'egg/ajv' 导入 Type、Static、Ajv 等 |
| type 推导不完整 | 用 type 定义 | 用 interface Foo extends Static<typeof Schema> {} 代替 |
| Middleware 混用报错 | 函数和 Advice 类放同一个 @Middleware() | 分开写多个 @Middleware(),每个内部类型一致 |
| AOP Middleware 不生效 | Advice 类没加 @Advice() 装饰器 | 必须同时有 @Advice() 装饰器才能被识别为 AOP |
详细的控制器开发文档:
references/http-controller.md - HTTP 接口完整指南references/mcp-controller.md - MCP 接口开发references/schedule.md - 定时任务references/ajv-validate.md - Ajv 参数校验references/middleware.md - Middleware 中间件(函数式 + AOP)核心概念(egg-core skill):模块、依赖注入、对象生命周期
单元测试(egg-unittest skill):HTTP 接口测试、Service 测试、Mock