naz / swagger-express-validator

Lightweight requrest/response validation middleware based on swagger/OpenAPI schema
MIT License
56 stars 24 forks source link

No response if api sends a json String only. #50

Open kanavarora opened 5 years ago

kanavarora commented 5 years ago

Hi! First of all great library, and we have been using it extensively for validating our request/responses between our microservices. Works great with objects, but if my response is of type string, which is a valid json, the library misbehaves with that. Allow me to explain with an example: If my schema looks something like this:

"/test": {
        "get": {
          "summary": "Test",
          "description": "Test",
          "produces": [
            "application/json"
          ],
          "parameters": [
          ],
          "responses": {
            "200": {
              "description": "successful operation",
              "schema": {
                "type": "string"
              }
            }
          }
        }
      }

And my api for this path looks like this:

router.get('/test', (req, res) => {
        res.json('result');
      });

Validation succeeds, but I lose the json-ness of the string. It just tries to return as a normal string in response even though content type is set to json.

I looked at the code and the issue seems to be that the response body is being parsed from JSON, but not being stringified in sendData. I have a potential fix for this too, but wanted to run by the issue first and see if there is anything which I am doing wrong here.

kanavarora commented 5 years ago

By the way works great, if I am sending a boolean or number only (or objects ofcourse). Just doesn't work in the case of a bare string like this.

kanavarora commented 5 years ago

Created a pull request to solve this issue: https://github.com/gargol/swagger-express-validator/pull/51