herramientas swagger controlador de errores middleware no detecta errores

visión de conjunto

Mi middleware errorHandler personalizado no detecta el error del validador de solicitud de herramientas swagger. En cambio, el error HTML de herramientas de swagger se envía de vuelta al cliente. ¿Cómo puedo hacer que mi middleware errorHandler detecte el error de validación de herramientas swagger y responda al cliente en consecuencia?

mi pronóstico

Estoy bastante despistado por desgracia. No importa dónde coloque la directiva app.use (errorHandler), el error html de herramientas swagger se devuelve al cliente y mi función errorHandler nunca detecta el error.

Tal vez estoy pasando por alto algo abiertamente incorrecto sobre mi configuración. Debajo está mi archivo app.js y debajo de mi app.js está la respuesta de error HTML de herramientas swagger [no deseada] que se devuelve al cliente. Nuevamente, he intentado poner el app.use (errorHandler) literalmente (en sentido figurado) en todas partes, a pesar de que el siguiente código solo lo muestra en dos lugares.

app.js
"use strict";

var swaggerTools = require("swagger-tools");
var compression = require("compression");
var app = require("express")();
var logger = require("./config/logger");
var projectConfig = require("./config/projectConfig");
var debug = require("debug")("app-js"); // run this to enable debug logging DEBUG=app-js node app.js

// swaggerRouter configuration
var options = {
    controllers: './api/controllers',
    useStubs: false
};

// The Swagger document (require it, build it programmatically, fetch it from a URL, ...)
var swaggerDoc = require('./api/swagger/swagger.json');

// compress all requests except those which have Cache-Control header with the no-transform directive
app.use(compression());

// for testing
module.exports = app;

// global error handler
function errorHandler(err, req, res, next, statusCode) {
    logger.error(err);
    debug(err);
    if (res.headersSent) {
        return next(err);
    } else {
        res.status(statusCode || 500).json(projectConfig.genericErrorResponse(statusCode || 500, err.message || err || "something blew up and the err object was undefined"));
    }
}

// handles timed out requests
function haltOnTimedout(req, res, next) {
    if (!req.timedout) {
        next();
    } else {
        debug("\nrequest timed out!\n");
        next("the request timed out", null, null, null, 504);
    }
}

// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) {
    "use strict"

    // Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain
    app.use(middleware.swaggerMetadata());

    app.use(function (req, res, next) {
        res.header("Access-Control-Allow-Origin", "*"); // CORS should be parametrized by configuration
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    });

    // Validate Swagger requests
    // app.use(middleware.swaggerValidator());

    app.use(middleware.swaggerValidator({
        validateResponse: false
    }));

    app.use(haltOnTimedout);
    app.use(errorHandler);

    // Route validated requests to appropriate controller
    app.use(middleware.swaggerRouter(options));
});

app.use(haltOnTimedout);
app.use(errorHandler);

app.listen(projectConfig.port || process.env.PORT || 9000)
    .on("connection", function (socket) {
        debug("\na new cxn was made by a client.\n");
        socket.setTimeout(projectConfig.expressTimeout || 120000);
    })
error html de herramientas swagger devuelto al cliente
Error: Parameter (copy) failed schema validation
<br> &nbsp; &nbsp;at throwErrorWithCode (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/swagger-tools/lib/validators.js:121:13)
<br> &nbsp; &nbsp;at Object.module.exports.validateAgainstSchema (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/swagger-tools/lib/validators.js:176:7)
<br> &nbsp; &nbsp;at /Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/swagger-tools/middleware/swagger-validator.js:143:22
<br> &nbsp; &nbsp;at /Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/async/lib/async.js:356:13
<br> &nbsp; &nbsp;at async.forEachOf.async.eachOf (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/async/lib/async.js:233:13)
<br> &nbsp; &nbsp;at _asyncMap (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/async/lib/async.js:355:9)
<br> &nbsp; &nbsp;at Object.map (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/async/lib/async.js:337:20)
<br> &nbsp; &nbsp;at validateValue (/Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/swagger-tools/middleware/swagger-validator.js:136:11)
<br> &nbsp; &nbsp;at /Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/swagger-tools/middleware/swagger-validator.js:343:21
<br> &nbsp; &nbsp;at /Users/cuv/Documents/dev/dev-project/dev-simple/node_modules/async/lib/async.js:356:13
¿Qué versiones estoy ejecutando?

nodo:

node --version
v6.2.2

últimas versiones de swagger-tools y express:

"swagger-tools": "^0.10.1",
"express": "^4.12.3"
cerrar

Cualquier ayuda y / o información sobre cómo hacer que mi middleware errorHandler se capture y, por lo tanto, anule el error html de swagger-tools sería muy obligatorio. También publiqué mi pregunta en los foros de la comunidad apigee, ya que es parte de un proyecto apigee-127.https://community.apigee.com/questions/29267/swagger-tools-error-handler-middleware-not-catchin.html

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta