在 Nest.js 项目中添加 Swagger 基本路径字段

Posted

技术标签:

【中文标题】在 Nest.js 项目中添加 Swagger 基本路径字段【英文标题】:Add Swagger base path field in Nest.js project 【发布时间】:2020-06-03 07:32:20 【问题描述】:

我正在尝试使用 nestjs/swagger 从我的后端创建一个 swagger 文件,但我遇到了与基本路径相关的问题。我想要实现的是将版本显示为基本路径,而不是在所有可用的方法中显示它,这既丑陋又令人困惑。

我的 API 现在具有以下结构(这是app.module.ts 中存在的一组内容):

const routes: Routes = [
  
    path: '/api',
    module: ApiModule,
    children: [
      
        path: '/v1',
        module: V1Module,
        children: [
          
            path: '/orders',
            module: OrdersModule
          ,
          
            path: '/users',
            module: UsersModule
          
        ]
      
    ]
  
];

这样,一旦我生成并检查了招摇,我看到我所有的方法都遵循/api/v1 前缀。这可能是一个例子:

订单

GET   /api/v1/orders
POST  /api/v1/orders
GET   /api/v1/orders/order_id
...

用户

GET   /api/v1/users
POST  /api/v1/users
GET   /api/v1/users/user_id
...

我想要的是摆脱以任何方法出现的/api/v1。我知道 SWAGGER 有 hostbasePath 的字段,但在 Nest.js 中找不到任何填充它的方法。经过研究,我发现有 .setBasePath().addServer() 方法,但它们对我不起作用(我很确定它们已被弃用)。

非常感谢您的帮助。

【问题讨论】:

但它们是你的端点,不是吗? 是的,但我不希望它那样工作。我希望 Nest.js 通过 /api/v1/ 提供服务 那么我建议根本不要使用nestjs-router 那我该如何路由呢? 你不需要nestjs-router来路由。 【参考方案1】:

如果您希望 nestjs 将 api/v1 添加到每个端点,请使用 setGlobalPrefix('api/v1') 来执行此操作。

https://docs.nestjs.com/faq/global-prefix#global-prefix

【讨论】:

我删除了之前的答案以进行更新。这确实是要走的路,但我觉得它解释得不好而且令人困惑。如果您想使用api/v1 作为全局前缀,您需要做的是使用setGlobalPrefix('api/v1') 启动应用程序,删除路由apiv1 并将子路由设置为主路由并添加配置值@987654328 @ 和 addServer('api/v1')。我建议你更新你的答案来解释它。 您可以使用 v1 部分的版本控制:docs.nestjs.com/techniques/versioning

以上是关于在 Nest.js 项目中添加 Swagger 基本路径字段的主要内容,如果未能解决你的问题,请参考以下文章

nest.js swagger返回类型code

swagger 中数组 POST 的空 JSON 参数

@nestjs/swagger:是不是可以防止网络钓鱼?

在vue项目中使用canvas-nest.js,报parameter 1 is not of type 'Element'

如何在 Nest.js 中提供静态 HTML 文件?

为啥 dto 中的类型在 swagger 中不可见?