我的控制器中有带有内联 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 但它不起作用。
我找到了解决方案,我们需要在 swaggerDefinition 中放置servers:[url:'/test-api/v1']而不是basePath。
我在以下链接中找到了解决方案: https://github.com/scottie1984/swagger-ui-express/issues/189
您在数组中忘记了 {},如下所示: “服务器”:[{“url”:'/test-api/v1'}]