@nestjs/swagger:如何添加 API URL?

Posted

技术标签:

【中文标题】@nestjs/swagger:如何添加 API URL?【英文标题】:@nestjs/swagger: How to add API URL? 【发布时间】:2021-09-19 12:34:54 【问题描述】:

我正在使用@nestjs/swagger。 这是我如何使用它的简单示例


    const document = SwaggerModule.createDocument(
      app,
      new DocumentBuilder()
        .setTitle('API')
        .setDescription('API')
        .setVersion('1.0')
        .addBearerAuth()
        .build(),
    );

    SwaggerModule.setup('/api/doc', app, document);

之前我可以使用 setHost('URL HERE') 添加 API url,但现在它不起作用。 所以我想添加将从 Swagger UI 发送请求的 api url。 如果问题不是很聪明,我是初学者很抱歉 谢谢!

【问题讨论】:

请添加您收到的错误详细信息或描述您面临的问题。 亲爱的@AvaniKhabiya,我们的目标是添加 api url,Swagger UI 将向其发送请求。之前它由 setHost 工作,但现在它不起作用。 看起来您使用的是@nestjs/swagger 版本 4***。 setHost 在版本 4*** 中被删除,但在版本 3*** 中可用。如果它在我猜@nestjs/swagger 的版本在您的项目中更新之前有效。正如我在答案中解释的那样,尝试使用.addServer(API_URL) 嗯。正是@Cyber​​Eternal。我正在使用@nestjs/swagger 4.8.1。您的答案有效,并且正是我需要的。非常感谢。 很高兴帮助@stratovarius! 【参考方案1】:

我认为您可能缺少控制器所在位置的“包含”参数。 尝试添加

   const document = SwaggerModule.createDocument(
  app,
  new DocumentBuilder()
    .setTitle('API')
    .setDescription('API')
    .setVersion('1.0')
    .addBearerAuth()
    .build(),
     incliude: [ModuleWhereControllerIs]  
);

【讨论】:

【参考方案2】:

看起来您使用的是@nestjs/swagger 版本 4***。 setHost 在版本 4*** 中被删除,但在版本 3*** 中可用。如果在我猜你的项目中更新了@nestjs/swagger 的版本之前它可以工作。

如你所见here

如果您当前使用的是 @nestjs/swagger@3.*,请注意 4.0 版中的以下中断/API 更改。

以下装饰器已更改/重命名:

@ApiModelProperty 现在是@ApiProperty @ApiModelPropertyOptional 现在是@ApiPropertyOptional @ApiResponseModelProperty 现在是@ApiResponseProperty @ApiImplicitQuery 现在是 @ApiQuery @ApiImplicitParam 现在是 @ApiParam @ApiImplicitBody 现在是@ApiBody @ApiImplicitHeader 现在是 @ApiHeader @ApiOperation( title: 'test' ) 现在是 @ApiOperation( summary: 'test' ) @ApiUseTags 现在是@ApiTags

DocumentBuilder 重大更改(更新的方法签名):

添加标签 addBearerAuth addOAuth2 setContactEmail 现在是 setContact setHost 已被移除 setSchemes 已被移除(使用 addServer 代替,例如 addServer('http://'))

已添加以下方法:

添加服务器 添加ApiKey addBasicAuth 添加安全性 添加安全要求

因此,如果您需要将 API URL 添加到您的 Swagger UI 页面,您可以通过添加 .addServer(API_URL) 来实现。 API_URL 可以是 /apihttps://example.com/api 之类的东西。并且可以多次添加。如果您需要例如本地使用、开发和生产环境的 URL。

完整示例如下所示

const document = SwaggerModule.createDocument(
      app,
      new DocumentBuilder()
        .setTitle('API')
        .setDescription('API')
        .setVersion('1.0')
        .addBearerAuth()
        .addServer(API_URL)
        .build(),
    );

    SwaggerModule.setup(swaggerPath, app, document);

【讨论】:

这是我的荣幸。

以上是关于@nestjs/swagger:如何添加 API URL?的主要内容,如果未能解决你的问题,请参考以下文章

@nestjs/swagger:如何在没有 @ApiOkResponse 装饰器的情况下添加架构?

NestJs Swagger:如何为动态类定义 Api 属性

NestJS Swagger:在 ApiProperty 装饰器中描述地图

NestJs/swagger:定义没有 DTO 类的引用模式

NRWL + NestJS 尝试使用 Swagger 插件

如何使用 nestjs/swagger 更改查询参数序列化?