const express = require("express");
const swagger = require("swagger-express-middleware");
const schema = {
swagger: '2.0',
info: {
version: '1.0.0',
title: 'test'
},
consumes: ['application/json'],
produces: ['application/json'],
paths: {
'/': {
post: {
parameters: [
{
name: 'body',
in: 'body',
required: true,
schema: {
$ref: "#/definitions/pet"
}
}
],
responses: {
default: {
description: 'Success',
schema: {
$ref: "#/definitions/pet"
}
}
}
}
}
},
definitions: {
pet: {
type: 'object',
required: ["name", "type"],
properties: {
name: {
type: "string"
},
type: {
type: "string",
enum: ["dog", "cat"]
},
address: {
$ref: "#/definitions/address"
}
}
},
address: {
type: "object",
required: ["street", "city", "state", "zip"],
properties: {
street: {
type: "string"
},
city: {
type: "string"
},
state: {
type: "string"
},
zip: {
type: "string"
}
}
}
}
};
exports.endpoint = function (req, res) {
const app = express();
swagger(schema, app, (err, middleware) => {
app.use(middleware.metadata());
app.use(middleware.parseRequest());
app.use(ignoreNullFieldErrors);
app.use(middleware.mock());
app.use(errorHandler);
app(req, res);
});
};
function ignoreNullFieldErrors (err, req, res, next) {
if (/Invalid type: null/.test(err.message)) {
// Swagger validation error due to a null field.
// Ignore it, and just proceed to the next Express middleware
next();
}
}
function errorHandler (err, req, res, next) {
res.status(err.status || 500).send(err.stack || err.message);
}