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

OpenAPI:“请求应该具有必需的属性‘body’”

贺宏逸
2023-03-14

我正在我的应用程序中构建一个新的endpoint,它使用Expres-openapi-validator作为验证器中间件。

/* index.ts */

import * as OpenApiValidator from 'express-openapi-validator';

const whitelistedPaths = [/* regex tested paths */];

app.use(
    OpenApiValidator.middleware({
      apiSpec: './schema/api.json',
      validateResponses: true,
      ignorePaths: whitelistedPaths,
      validateSecurity: true,
    }),
  );

/* ... */

app.post(
  '/users/:email/validateToken',
  bodyParser.json(),
  (req) => validateToken(req.params.email, req.body.resetToken),
);

在我的配置 (api.json) 文件中,我已将终结点的架构定义为:

    "/users/{email}/validateToken": {
      "post": {
        "tags": ["users"],
        "summary": "Validate user token",
        "operationId": "validateToken",
        "responses": {
          "200": {
            "description": "Ok",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        },
        "parameters": [
          {
            "name": "email",
            "in": "path",
            "description": "User email",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["resetToken"],
                "properties": {
                  "resetToken": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },

我已经使用以下JSON正文使用Postman进行了测试:

{
  "resetToken": "randomd9320ru9"
}

但收到以下错误消息:

{
    "message": "request should have required property 'body'",
    "errors": [
        {
            "path": ".body",
            "message": "should have required property 'body'",
            "errorCode": "required.openapi.validation"
        }
    ]
}

我不知道它为什么抱怨body。我试着在api.json中的Request estBody配置下放入"必需": true,但这并没有改变任何事情。我只是想确保body包含所需的字段resetToken

共有1个答案

都沈浪
2023-03-14

我想你需要在使用OpenApiValidator.middleware之前使用bodyParser.json()

js prettyprint-override">app.use(bodyParser.json());
app.use(
    OpenApiValidator.middleware({
      apiSpec: './schema/api.json',
      validateRequests: true,
      validateResponses: true,
      ignorePaths: whitelistedPaths,
      validateSecurity: true,
    }),
  );
...
app.post(
  '/users/:email/validateToken',
  (req) => validateToken(req.params.email, req.body.resetToken),
);
 类似资料:
  • 我的nodejs应用程序有一个开放api。yaml文件和ExpressOpenAPI验证验证器。我正在做一个POST请求,它正在工作,api验证程序没有返回任何错误: 在我的open-api.yaml中,我有: 然后我尝试对我的应用程序进行dockerized-创建了一个docker容器,并在pm2-runtime中运行它。但是,当应用程序在docker容器中运行时,我向它发送相同的请求时,在验证

  • 问题内容: 在我的Web应用程序中,我对表单字段使用了一些自定义验证。在同一个表单中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单。 通常,我使用Safari作为默认浏览器。现在Safari5退出了,突然我的“取消/重置”按钮不再起作用了。每次按下重置按钮时,表单中的第一个字段都会获得焦点。但是,这与我的自定义表单验证相同。在其他浏览器上尝试时,一切都很好。我必须是Safari 5

  • 我需要描述一个api,在请求体中有一个带有必填字段的对象,其中一个字段是一个对象本身,它有另一组必填字段。 我正在使用开放api v3和swagger编辑器(https://editor.swagger.io/)在我把我的。将yaml文件放到编辑器上,我生成了一个html客户端( 我希望字段1是必需的,字段2是可选的,但事实并非如此。 这是我的。yaml文件

  • 我看了已经问过的问题,但没有一个能够解决我的问题。 < code > https://stack overflow . com/questions/45534187/path-and-formdata-parameter-at-same-time < code > https://stack overflow . com/questions/50562971/swagger-editor-show

  • 我用一个形状元素作为视图的背景,做这个SO问题。我在用Android Studio,它告诉我... 解决了:原因是它不在文件夹中。 编辑:是的,我知道笔划部分不正确。

  • 我正在尝试运行布谷鸟api。布谷鸟网在我的系统上运行良好。但当我尝试布谷鸟api时,我得到了以下错误: 我试图更改api。通过添加以下代码: 但这对我没有帮助。这个问题的解决方案是什么?