控制器
控制器负责处理应用中的 HTTP 和 WebSocket 请求。它们作为外部请求的入口点,并充当传输层与业务逻辑之间的桥梁。
目的
控制器只能执行以下特定任务:
验证传输层输入 - 验证身份认证、授权和输入格式
调用逻辑组件 - 将业务逻辑委托给相应的逻辑组件
转换输入 - 将请求数据转换为逻辑组件调用所需的参数
处理错误 - 捕获并正确响应来自逻辑组件的错误
控制器不应包含业务逻辑。所有业务规则都必须在逻辑组件中实现。
位置
所有控制器都必须放在 /src/controllers 目录下,并以它们执行的操作命名。
src/
└── controllers/
├── users/
│ ├── get-user.ts
│ ├── create-user.ts
│ └── update-user.ts
├── content/
│ ├── publish-content.ts
│ └── delete-content.ts
└── health.ts控制器结构
基础 HTTP 处理器
POST 请求处理器
查询参数处理器
输入要求
通过控制器接收的所有输入键(JSON 正文、查询参数、URL 参数、请求头等) 必须使用小写 以避免处理数据时出现大小写问题。
多词参数
多词参数必须使用以下方式定义: snake_case.
错误命名:
minPriceCarsomethingURLuserId
正确命名:
min_pricecarsomething_urluser_id
示例
错误处理
标准错误响应
控制器应返回一致的错误响应格式:
错误映射
将领域错误映射到相应的 HTTP 状态码:
身份认证与授权
身份认证检查
授权检查
最佳实践
1. 保持控制器精简
控制器应只是逻辑组件的轻量包装:
2. 尽早验证
尽早验证并快速失败:
3. 使用类型安全
利用 TypeScript 实现类型安全:
4. 适当记录日志
记录重要事件和错误:
测试控制器
请参阅 测试服务(WKC) 用于集成测试指导的文档。
最后更新于