如何在 Node.js 中设置 OpenAPI 3.0.0、Swagger UI 的 basePath

问题描述 投票:0回答:2

我的控制器中有带有内联 openAPI 注释的路由器。 API 工作正常,但端点的 swagger URL 未附加基本路径,因此我从 API 网关收到 403 禁止。

所以,就像我的实际 URL 是 http://api-dev/test-api/v1/test?p=123 一样,当我从 UI 应用程序使用时,这工作正常。但是在 swagger 文档中,当我访问端点时,我得到的 URL 为 http://api-dev/test?p=123,basePath '/test-api/v1' 丢失,因此我在招摇文档中被禁止。

下面是我的控制器代码 test-controller.ts:

/**
 *@openapi
 * tags:
 *   name: Test Record
 *   description: Get Test Record
 * securityDefinitions:
 *   my_token:
 *     type: api_key
 *     name: my_token
 *     in: header
 * security:
 *   my_token: []
*/

/**
 *@openapi
 * /test:
 *   get: 
 *   tags: [Test Record]
 *   summary: ...
 *   consumes:
 *    - application/json
 *    produces:
 *    - application/json
 *    parameters: 
 *       -in: ....(parameters definitions)
 *    responses:
 *      200: ...
 *      400: ...
*/

router.get('/test',async(req:IncomingMessage,res:ServerResponse)=>{...}

现在我尝试将 basePath 放在上面提到标签和安全令牌的注释中。但它不起作用

下面是我的index.ts文件:

const testController=require("./controllers/test-controller")
const options={
   definition:{
      openapi:3.0.0,
      info:{
         title: 'Test API ',
         version:'1.0.0'
      }
   },
   apis:[`${path.join(__dirname,'/controllers/*')}`]
}
const swaggerSpec=swaggerJsdoc(options);
app.use('/test-api/v1/docs',swaggerUi.serve,swaggerUi.setup(swaggerSpec))

app.use(`/test-api/v1`,testController)

我也尝试在 swaggerSpec 中添加 basePath 但它不起作用。

node.js swagger swagger-ui openapi
2个回答
1
投票

我找到了解决方案,我们需要在 swaggerDefinition 中放置servers:[url:'/test-api/v1']而不是basePath。

我在以下链接中找到了解决方案: https://github.com/scottie1984/swagger-ui-express/issues/189


0
投票

您在数组中忘记了 {},如下所示: “服务器”:[{“url”:'/test-api/v1'}]

© www.soinside.com 2019 - 2024. All rights reserved.