【问题标题】:Request body not showing in Nest.js + Swagger请求正文未显示在 Nest.js + Swagger 中
【发布时间】:2020-09-14 22:39:47
【问题描述】:

我的控制器代码是这样的。

@Controller('customer')
export class CustomerController{

    constructor(private readonly customerService: CustomerService){}

    @Post('lookup')
    async someMethod(@Body() body:any){

        console.log("BEGIN -- CustomerController.someMethod");

我希望在 Swagger 中看到一个可以输入一些文本作为请求正文的地方,但我却看到了这个

【问题讨论】:

  • 你在使用 Swagger 插件吗?
  • 在我的 package.json 我有 "@nestjs/swagger": "^4.4.0",
  • 在您的nest-cli.json 中您使用的是swagger 插件吗?
  • 我不太确定插件在这里是什么意思,但这就是我的nest-cli.json中的内容
  • { "collection": "@nestjs/schematics", "sourceRoot": "src" }

标签: swagger swagger-ui nestjs nestjs-swagger nestjs-config


【解决方案1】:

所以听起来这里发生了一些事情。 Swagger UI 是用于发送请求的辅助工具,但要做到这一点,它需要知道请求正文的形状。 any 不够好。如果您正在寻找一种可以发送任何东西的工具,那么 curl 或 postman 是您最好的选择(至少免费)。

Nest 有一个Swagger plugin,它将读取您的 Typescript 代码并相应地修饰您的类型和方法,但您必须选择启用它。否则,您需要使用 @nestjs/swagger 包中的装饰器来告诉 Swagger 预期哪些类型进出方法。

只要与@Body() 对应的类型具有 swagger 装饰器您启用 swagger 插件 并且有一个有效的类,swagger UI 应该显示为预期的,但是使用上述类型并使用 any 类型对您没有任何好处。

【讨论】:

  • 我是否需要安装 Swagger 插件,或者如果我的 package.json 中有这个插件,它是开箱即用的吗? "@nestjs/swagger": "^4.4.0"
  • 我的回答中的文档链接清楚地解释了如何设置插件工作。
  • 我尝试将正文类型设置为界面,但仍然无法正常工作。最后,将接口替换为类工作。谢谢...
  • 接口在运行时不存在,因此没有反映它们的元数据。
【解决方案2】:

添加@ApiProperty()

export class User{

 @ApiProperty()
  name:string
 
}

【讨论】:

    【解决方案3】:

    我的端点接受未知的键/值数据并且我遇到了同样的问题(我尝试了 any, unknown, Record, object, {})。最后@Body() data: Map<string, any> 为我工作。

    【讨论】:

      【解决方案4】:

      试试这样:

      @ApiBody({description: "body:any someMethod"})
      @Post('lookup')
      async someMethod(@Body() body:any){
      console.log("BEGIN -- CustomerController.someMethod");
      }
      

      【讨论】:

        【解决方案5】:

        Swagger 无法解释您的代码。 不是您的代码有问题。如果您的目标是测试您的 API 以供 UI 团队使用,而不是全面的 swagger 文档,那么我发现使用 Postman 是最简单的。 尝试使用 Postman 访问您的 API

        【讨论】:

          猜你喜欢
          • 2021-06-05
          • 2022-11-11
          • 1970-01-01
          • 2023-03-16
          • 2020-06-30
          • 2023-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多