当前位置: 首页 > 知识库问答 >
问题:

无法引用在Swagger中的单独文件中定义的组件模式

崔涵亮
2023-03-14

我有以下 API 文档:

swagger: "3.0"
info:
  version: 0.0.1
  title: Test API
paths:
  /users:
    get:
      summary: Get all registered users
      produces:
      - application/json
      responses:
        200:
          description: Users successfully returned
        403:
          description: User not authorised to call this API
          schema:
            $ref: 'components.yaml#/components/schemas/AuthError'

其中AuthError模式在一个名为components.yaml的单独的yaml文件中定义:

components:
  schemas:
    AuthError:
      type: object
      properties:
        error:
          type: sting
          description: Error message

以及摇摆器配置:

const swaggerDefinition = {
  info: {
    title: 'FlexiWAN REST API documentation',
    version: '1.0.0',
    description: 'This is the REST API for FlexiWAN management',
  },
  components: {},
  host: 'local.flexiwan.com:3443',
  basePath: '/api',
  securityDefinitions: {
    JWT: {
        type: 'apiKey',
        in: 'header',
        name: 'Authorization',
        description: "",
    }
  }

};
const options = {
  swaggerDefinition,
  apis: ['./swagger/**/*.yaml'],
};

const swaggerSpec = swaggerJSDoc(options);
app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

但是当我尝试访问Swagger UI时,我得到以下错误:

path./users.get.responses.403.schema.$ref 处的解析程序错误 无法解析引用:尝试解析相对 URL,但没有 basePath。path: 'components.yaml' basePath: 'undefined'

我在这里错过了什么?

共有1个答案

葛承教
2023-03-14

所以我设法用这个很棒的资源解决了这个问题:

我所要做的就是在API文档文件的末尾添加对组件的引用,并相应地更改架构引用:

  403:
    description: User not authorised to call this API
    schema:
      $ref: '#components/schemas/AuthError'

components:
  $ref: './components.yaml'
 类似资料:
  • 问题内容: 我想将Mongoose模型分离到一个单独的文件中。我试图这样做: 然后,我尝试使用如下模型: 在单独的模块中引用模型是否合理? 问题答案: 基本方法看起来很合理。 作为一种选择,您可以考虑集成模型和控制器功能的“提供商”模块。这样,您可以让app.js实例化提供程序,然后可以执行所有控制器功能。app.js只需指定要实现的具有相应控制器功能的路由即可。 为了进一步整理,您还可以考虑使用

  • 我有许多swagger文件,使用相同的定义。我想将此定义移动到单独的文件并引用它们。 主 swagger 文件如下所示: 我尝试导入的文件已保存到 exceptions.yaml(并保存到同一位置),如下所示: 我读过$refhttps://swagger.io/docs/specification/using-ref/但找不到如何导入定义,而不是API 我正在尝试导入它,并做了以下更改: 或者使

  • 这是我第一次涉足斯威格,所以请温柔点。 我有以下定义: 因此,有一个名为的属性,它是的数组。和是类型的模型(我知道这不会转化为招摇)。我想做的是定义一个带有默认值的实际模型数组,在本例中是和。大概是这样的: 或 当然,两者都不起作用。原因是,虽然模型正确地描述了,但不同的可以具有不同的参数集。 有没有一种方法可以从本质上定义几个模型的列表,或者将和模型映射到

  • 问题内容: 例如,我的想法是: File1.js File2.js 这段代码是用于节点服务器的,此代码会出现问题吗? 问题答案: 不,只需使用相同的“ io”对象。 File1.js File2.js app.js index.html

  • 当我设计炫耀的API服务模型时,我正在研究巨大的yaml模式,并强调了文本。我想将部分保存在另一个文件中,以便具有更大的灵活性和可读性。 在本文档之后,我使用了这部分代码: 在我的文件中,我有这样的东西: 它可以在本地主机上运行,但是我在企业部署服务器上运行我的文件时遇到了以下问题: 组件中的错误解析程序错误.架构.请求.属性.技术数据.$ref 无法解析引用,原因如下: 不可接受 我成功地能够在