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

2024-01-11

我正在我的应用程序中构建一个新端点,它使用express-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"
                  }
                }
              }
            }
          }
        }
      }
    },

我已经使用 Postman 使用以下 JSON 主体进行了测试:

{
  "resetToken": "randomd9320ru9"
}

但收到以下错误消息:

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

我不知道为什么它会抱怨body。我尝试把"required": true在下面requestBody配置在api.json但这并没有改变任何事情。我只是想确保正文包含必填字段resetToken.


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

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),
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenAPI:“请求应具有必需的属性‘body’” 的相关文章

随机推荐