swagger-express-middleware icon indicating copy to clipboard operation
swagger-express-middleware copied to clipboard

Example values are populated into requests when property is empty string

Open tgandrews opened this issue 8 years ago • 0 comments

Here is an example app:

var express = require('express');
var swagger = require('swagger-express-middleware');
var request = require('request');

var app = express();

swagger({
  swagger: '2.0',
  info: {
    version: '1.0',
    title: 'Bug'
  },
  consumes: [
    'application/json'
  ],
  paths: {
    '/': {
      post: {
        parameters: [{
          name: 'payload',
          in: 'body',
          required: true,
          schema: {
            $ref: '#/definitions/Node'
          }
        }]
      }
    }
  },
  definitions: {
    Node: {
      type: 'object',
      properties: {
        name: {
          type: 'string',
          example: 'should not see'
        },
      }
    }
  }
}, app, function(err, middleware) {

  app.use(
    middleware.metadata(),
    middleware.parseRequest(),
    middleware.validateRequest(),
    function (req, res, next) {
      res.status(200).json(req.body).end();
    }
  );

  app.listen(8000, function() {
    request({
      url: 'http://localhost:8000',
      method: 'POST',
      body: { name: '' },
      json: true,
    }, function(err, res, body) {
      console.log(body);
    });
  });
});

This logs

{ name: 'should not see' }

When it should log the value posted:

{ name: '' }

This example value is coming from getValueToValidate in lib/helpers/json-schema.js. Where if you pass an empty string then it returns the example data and updates the value.

This makes perfect sense for default value but not example value.

tgandrews avatar Oct 27 '16 15:10 tgandrews