我正在尝试在 NestJS 中记录我的 api。我遵循了 NestJS 文档并且它工作得很好但我想知道是否有将 swagger 装饰器与 Controller 代码分开的方法。因为 api 开始增长, Controller 代码开始变得有点困惑,因为在请求方法之间使用装饰器会干扰它的流程显示方式。
我已经使用了装饰器,但是当你需要端点保护验证时,管道变得非常大而且没有重点,因为添加了很多装饰器而且我并不感到困惑在实际执行流程中 Swagger 并不是那么重要因为它是守卫、验证者等。
@Post()
@Roles('user')
@ApiResponse({ status: 201, description: 'The token has been successfully created.'})
@ApiResponse({ status: 403, description: 'Forbidden.'})
@UsePipes(new ValidationPipe())
@HttpCode(200)
async createToken(@Body() createTokenDto: CreateTokenDto) {
this.tokenBuilderService.createToken(createTokenDto);
}
最佳答案
很老的问题,但只是指出来让人们知道。
您可以使用从 @nestjs/common
导入的 applyDecorators
函数进行分离,它接受装饰器数组并将它们组合在一个装饰器中:https://docs.nestjs.com/custom-decorators#decorator-composition
在您的示例中,您可以执行以下操作:
// controller.decorator.ts
export function SwaggerDecorator() {
return applyDecorators(
ApiResponse({ status: 201, description: 'The token has been successfully created.' }),
ApiResponse({ status: 403, description: 'Forbidden.' })
);
}
Note that the decorators are without the @ symbol.
并将其导入到 Controller 文件中:
import { SwaggerDecorator } from './controller.decorator'
@Post()
@Roles('user')
@SwaggerDecorator()
@UsePipes(new ValidationPipe())
@HttpCode(200)
async createToken(@Body() createTokenDto: CreateTokenDto) {
this.tokenBuilderService.createToken(createTokenDto);
}
我刚遇到这个问题,它清除了我 Controller 中的大量 swagger 代码。
关于node.js - 将 swagger 实现与 Controller 代码分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581334/