【问题标题】:NestJs + Swagger documentation based on versioning基于版本控制的 NestJs + Swagger 文档
【发布时间】:2022-08-12 01:36:07
【问题描述】:

我已经构建了一个nestjs webapi,并根据https://docs.nestjs.com/techniques/versioning在控制器和操作级别实现了版本控制

我正在研究的解决方案是,我想根据控制器版本生成 2 个不同的招摇。 例如,我为 2 个不同的版本定义了 2 个控制器。如果我点击 [example.com/v1/swagger],它应该只加载 v1 版本控制器 swagger doc,同样适用于 v2

  • 你检查过这个issue吗?它与您的问题有关吗?
  • @wald3:不。我正在寻找与 Nestjs 版本控制一致的 Swagger 版本控制

标签: nestjs swagger-ui nestjs-swagger


【解决方案1】:

我最近更新了我的 API 以支持版本控制。我无法正确加载 Swagger 文档。这是我的解决方案,希望对您有所帮助!

之前,我们使用app.setGlobalPrefix(APP_ROUTE_PREFIX) 来定义前缀。

const APP_ROUTE_PREFIX = 'api/v2';
app.setGlobalPrefix(APP_ROUTE_PREFIX);

Swagger 文档安装为:

SwaggerModule.setup(`${APP_ROUTE_PREFIX}/docs`, app, document);

为了采用版本控制,进行了以下更改。

  1. 路由前缀不再包含版本;让 Nestjs 处理它。
    const APP_ROUTE_PREFIX = 'api';
    
    1. 版本控制已启用,默认值为“2”,模仿以前的行为。
      app
        .enableVersioning({ type: VersioningType.URI, defaultVersion: '2' })
        .setGlobalPrefix(APP_ROUTE_PREFIX);
    
    1. 要正确安装 Swagger 文档,我们必须在路径中使用变量 :version
      SwaggerModule.setup(`${APP_ROUTE_PREFIX}/:version/docs`, app, document);
    
    1. 接下来,我们基于每个控制器更改了需要采用版本控制的控制器。
    @Controller({ path: 'objects/:id', version: ['2', '3'] })
    
    1. 最后,我们根据每个路由更改了支持多个版本的处理程序。
      @Version('2')
      getPageV2(): Promise<Observable<unknown>> {
        return this.service.getOkayData();
      }
    
      @Version('3')
      getPageV3(): Promise<Observable<unknown>> {
        return this.service.getBetterData();
      }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多