Swagger UI上没有出现“请求正文”

时间:2019-04-22 18:48:59

标签: node.js swagger openapi

我正在尝试对Swagger文档中的 POST 请求进行测试,但是遇到以下麻烦:

在Swagger编辑器上,我可以正常进行测试,但是在Swagger UI上,“请求正文”字段不会出现,因此我无法输入电子邮件和密码来测试请求。

在这里您可以看到“请求正文”字段,其中包含可供编辑的数据示例:
Swagger Editor Example

在这里您可以看到Swagger UI没有显示它:
Swagger UI Example

注意:我已经生成了一个 nodejs服务器

我的.yaml代码:

openapi: '3.0.1'

info:
  version: 1.0.0
  title: Test
  description: Test openapi.

servers:
  - url: http://localhost:3005

paths:
  /login:
    post:
      summary: Login
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/login'
      responses:
        200:
          description: Test

components:
  schemas:
    login:
      type: object
      properties:
        email:
          type: string
          example: example@example.com.br
        password:
          type: string
          format: password
          example: example123
        expires:
          type: integer
          example: 86400
      required:
       - email
       - password

2 个答案:

答案 0 :(得分:0)

TL; DR:将Swagger UI更新到最新版本。

只是为了阐明情况(以供将来的读者使用):OP将这个OpenAPI 3.0定义粘贴到Swagger Editor中,生成了一个Node.js服务器并运行它。请求正文显示问题与Swagger UI有关,该UI是此Node.js服务器(http://localhost:8080/docs)的一部分。

问题在于此Node.js服务器使用的是Swagger UI的非常旧的版本。更具体地说,它使用 oas3-tools软件包1.0.1版,其中捆绑了Swagger UI 3.3.1版。 Swagger UI的最新版本(截至撰写本文时)为3.22.1,并且没有所描述的问题。

解决方案是将Swagger UI更新到最新版本:

  • 您可以open an issueoas3-tools一起使用,并要求开发人员将捆绑的Swagger UI更新到最新版本。另外,您也可以为此提交PR。

  • 作为快速修复,您可以派生oas3-tools,更新<oas3-tools>\middleware\swagger-ui文件夹中捆绑的Swagger UI文件,然后更新生成的Node.js的package.json服务器来引用您的oas3-tools分支。

答案 1 :(得分:0)

尽管'request body'字段确实以建议的@Helen更新显示在UI中,但是发布的body对象似乎仍然无法显示在控制器中,这可能是因为捆绑了swagger-tools中间件也很老我必须对 node_modules / oas3-tools / middleware / swagger-metada.js 进行一些更改,以使requestBody出现在控制器的req.swagger.params中。我希望这可以在正式的oas3-tools代码正在开发中(如果有的话)帮助完成一个项目。

第162行,位于var parsers = _.reduce(parameters ... }, [])块之后:

if (swaggerMetadata.operation.requestBody && parsers.indexOf(bodyParser) === -1) parsers.push(bodyParser);

_.each(parameters, ... });块之后的第225行:

if (req.body) swaggerMetadata.params.body = {value: req.body};