NestJS 装饰器参考

NestJS 完整装饰器参考:控制器设置、路由装饰器、参数提取、管道验证和自定义装饰器。

1. 控制器与路由装饰器

@Controller('articles')
export class ArticlesController {

  @Get()
  findAll(@Query() query: FindArticlesDto) { ... }

  @Get(':id')
  findOne(@Param('id', ParseIntPipe) id: number) { ... }

  @Post()
  @HttpCode(HttpStatus.CREATED)
  create(@Body() dto: CreateArticleDto) { ... }

  @Delete(':id')
  @HttpCode(HttpStatus.NO_CONTENT)
  remove(@Param('id') id: string) { ... }
}

2. 参数装饰器

@Get(':id')
async findOne(
  @Param('id') id: string,
  @Query('page') page: number,
  @Body() body: CreateArticleDto,
  @Headers('authorization') auth: string,
  @Req() request: Request,
) { ... }

3. 自定义参数装饰器

export const CurrentUser = createParamDecorator(
  (data: string | undefined, ctx: ExecutionContext) => {
    const user = ctx.switchToHttp().getRequest().user;
    return data ? user?.[data] : user;
  },
);

@Get('profile')
@UseGuards(JwtAuthGuard)
getProfile(@CurrentUser() user: User) { ... }

4. 组合装饰器

export const Auth = (...roles: string[]) => applyDecorators(
  SetMetadata('roles', roles),
  UseGuards(JwtAuthGuard, RolesGuard),
);

@Get('users')
@Auth('admin')
getUsers() { ... }