该技能面向 NestJS 项目,讲解如何创建和使用自定义装饰器。装饰器是 TypeScript/ES2016 特性,可添加元数据并修改类、方法或参数,NestJS 大量使用装饰器并提供创建工具。
主要能力覆盖四类装饰器:参数装饰器(从请求/上下文提取数据)、方法装饰器(为路由处理器添加元数据)、类装饰器(为控制器添加元数据)、组合装饰器(合并多个装饰器)。内置参数装饰器包括 @Request()/@Req()、@Response()/@Res()、@Next()、@Session()、@Param()、@Body()、@Query()、@Headers()、@Ip()、@HostParam()。
使用方式:通过 createParamDecorator 与 ExecutionContext 编写参数装饰器,例如提取 request.user 的 @User,并支持传入 data 取子属性如 @User('id');通过 SetMetadata 创建元数据装饰器,例如 @Roles、@Public、@RequirePermissions,供守卫、拦截器或过滤器读取;通过 applyDecorators 组合装饰器,例如把守卫、角色与 Swagger 响应说明合成 @Auth 或 API 文档装饰器。自定义装饰器可与管道配合,如 @User('id', ParseIntPipe)。文档还给出请求上下文、分页、Header、Cookie、协议、主机名、超时、缓存等示例,并列出最佳实践:单一职责、命名清晰、类型安全、导出元数据键常量、编写测试。命名惯例上参数装饰器用名词,元数据装饰器用动词或形容词,组合装饰器用描述性组合。
适用场景包括从请求对象提取属性、常用参数模式快捷方式、为守卫/拦截器/过滤器设置元数据、组合多个装饰器、实现基于角色的访问控制、领域抽象、减少控制器样板代码、构建可复用装饰器库。
限制方面:资料未提供该技能的安装命令、版本兼容范围、收费与价格信息,亦未说明具体运行环境要求;使用时应结合实际 NestJS 版本验证装饰器行为。