Javascript NestJS swagger生成的文档不显示参数信息

Javascript NestJS swagger生成的文档不显示参数信息,javascript,typescript,swagger,nestjs,openapi,Javascript,Typescript,Swagger,Nestjs,Openapi,我正在使用NestJS框架的node.js服务器上工作。我想使用自动生成应用程序的API文档 为我的控制器方法正确生成的文档使用了@Body()方法进行控制器数据交换。对于使用@Param()方法的控制器方法,它无法正常工作。未能生成正确文档的示例控制器: @Get('/:identifier') @RouteLogger() @ApiParam({name: 'identifier', required: true, description: 'either an integer

我正在使用NestJS框架的node.js服务器上工作。我想使用自动生成应用程序的API文档

为我的控制器方法正确生成的文档使用了
@Body()
方法进行控制器数据交换。对于使用
@Param()
方法的控制器方法,它无法正常工作。未能生成正确文档的示例控制器:

  @Get('/:identifier')
  @RouteLogger()
  @ApiParam({name: 'identifier', required: true, description: 'either an integer for the project id or a string for the project name', schema: { oneOf: [{type: 'string'}, {type: 'integer'}]}})
  async getProject(
    @Param('identifier')
    identifier: string | number,
    @Res() res: Response
  ) { }
这将在swagger UI中生成以下内容:


您可以看到,swagger UI中的端点无法显示具有任何参数的端点。使用
@Param
s为nestJS控制器编写GET端点的正确方法是什么,这样swagger就可以正确生成文档了?

似乎我的自定义装饰程序
@RouteLogger()
在某种程度上与swagger文档的生成相冲突

在我将该装饰器移动到API
@ApiParam()
decorator下后,正确生成了文档:

  @Get('/:identifier'
  @ApiParam({name: 'identifier', required: true, description: 'either an integer for the project id or a string for the project name', schema: { oneOf: [{type: 'string'}, {type: 'integer'}]}})
  @RouteLogger()
  async getProject(
    @Param('identifier')
    identifier: string | number,
    @Res() res: Response
  ) { }

很高兴你已经找到了解决方案

您还可以使用OpenAPI的CLI插件自动获取这些参数(无需使用decorators),如文档中所述:

为此,只需更改
nest cli.json
,包括
编译器选项
,如下所示:

{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": ["@nestjs/swagger"]
  }
}
或者,如果您需要将选项传递给插件:

{
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": [
      {
        "name": "@nestjs/swagger/plugin",
        "options": {
          "dtoFileNameSuffix": [
            ".entity.ts",
            ".dto.ts"
          ],
          "controllerFileNameSuffix": [
            ".controller.ts"
          ]
        }
      }
    ]
  }
}