My nodejs app has an open-api.yaml file and express-openapi-validate validator. I'm doing a POST request which is working and the api validator doesn't return any errors:
curl --request POST 'http://localhost:33004/my-app/settings' --data-raw '{"serials":["1234","2355"]}' -H 'Content-Type: application/json'
In my open-api.yaml I have:
openapi: '3.0.0'
servers:
- url: 'http://{host}/my-app'
variables:
host:
enum:
- 'localhost'
....
...
paths:
/settings:
...
post:
tags:
- 'settings'
operationId: 'postSettings'
requestBody:
content:
application/json:
schema:
type: object
properties:
serials:
type: array
items:
type: string
...
Then I tried dockerizing my app - created a docker container, and ran it inside with the pm2-runtime. However, when I send the same request to the docker container when the app is running in it, I get error while validating request: request should have required property '.headers'
. I have no property '.headers' mentioned in the open-api.yaml file.
I tried removing the validator middleware, and the request went through just fine. Can you help me understand what is the validator complaining about?
EDIT:
I managed to find the error object:
{
"data": [
{
"dataPath": "",
"keyword": "required",
"message": "should have required property '.headers'",
"params": {
"missingProperty": ".headers"
},
"schemaPath": "#/required"
}
],
"name": "ValidationError",
"statusCode": 400
}
needless to say I have no required headers property...
-H "Content-Type: application/json"
to your curl command. Does this help? – Figureheadtags
,operationId
andrequestBody
must be insidepost
, not alongside it. Try validating your YAML in editor.swagger.io. – Figurehead