Skip to content

Invalid request validation  #70

Description

@quirinobrizi

I'm getting the following error for request validation:

error while validating request: request should have required property '.headers'

The stack I am using is:

  • express 4.17.1
  • express-openapi-validate 0.5.1
  • OpenAPI spec 3.0.1
  • NodeJS 15.12.0
  • ES6 implementation

Doing some research I narrowed it down to the following code part of the validate function:

const reqToValidate = {
        ...req,
        cookies: req.cookies
          ? { ...req.cookies, ...req.signedCookies }
          : undefined,
      };

Which compiles to:

const reqToValidate = Object.assign({}, req, { cookies: req.cookies
                    ? Object.assign({}, req.cookies, req.signedCookies) : undefined });

The problem here is express uses accessors get/set for the headers, as a result the property headers is not present as part of reqToValidate.

As a quick fix the issue I implemented the following:

const validator = this.openApiValidator.validate(method, path);
return (req, res, next) => {
    const reqToValidate = Object.assign({}, req, {
        cookies: req.cookies
            ? Object.assign({}, req.cookies, req.signedCookies) : undefined
    });
   
    if (!reqToValidate.hasOwnProperty('headers')) {
        reqToValidate.headers = req.headers;
    }
    return validator(reqToValidate, res, next);
};

which works pretty well.

Thanks,
~Q

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions