node.js - 将 swagger 实现与 Controller 代码分开

标签 node.js swagger nestjs

我正在尝试在 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/

相关文章:

asp.net-core - 如何使用 swagger UI 和解决方法选项预检问题 (CORS) 设置 ClientCredentials 流

typescript - 如何在 validationif 装饰器 nestjs 类验证器中使用其他条件?

javascript - 开 Jest : Cannot spy the property because it is not a function; undefined given instead getting error while executing my test cases

javascript - 从 NodeJS 查询返回值,并将结果存储在对象变量中以在每个页面上使用

node.js - 更新多个列和值 Node postgres

java - Swagger API 文档通过@ApiResponse 与映射作为responseContainer 不起作用

swagger - 如何在我的应用程序中集成 swagger-ui

pm2 - 如何在 pm2 中使用 tsconfig-paths?

html - 如何使用express和Angular 2( typescript )编辑待办事项列表中的标题

javascript - 执行 Express.js 中的所有函数后渲染模板