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() { ... }