swagger tools Fehlerbehandlungs-Middleware fängt keine Fehler ab

Überblic

Meine benutzerdefinierte errorHandler-Middleware erkennt den Anforderungsvalidierungsfehler von swagger-tools nicht. Stattdessen wird der HTML-Fehler von swagger tools an den Client zurückgesendet. Wie kann ich meine errorHandler-Middleware dazu bringen, den Fehler bei der Validierung der Swagger-Tools abzufangen und dem Client entsprechend zu antworten?

meine Prognose

Ich bin leider eher ahnungslos. Unabhängig davon, wo ich die Anweisung app.use (errorHandler) platziere, wird der HTML-Fehler von swagger tools an den Client zurückgegeben, und meine errorHandler-Funktion fängt den Fehler nie ab.

Möglicherweise übersehe ich etwas offenbar Falsches an meinem Setup. Unten ist meine app.js-Datei und unten ist meine app.js die [unerwünschte] HTML-Fehlerantwort von swagger-tools, die an den Client zurückgegeben wird. Auch hier habe ich versucht, die app.use (errorHandler) buchstäblich (im übertragenen Sinne) überall zu platzieren, obwohl der folgende Code sie nur an zwei Stellen anzeigt.

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);
    })
swagger tools html error zurückgegeben an client
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
Welche Versionen laufe ich?

Knoten

node --version
v6.2.2

neueste Versionen von Swagger-Tools und Express:

"swagger-tools": "^0.10.1",
"express": "^4.12.3"
schließe

Jede Hilfe und / oder Einsicht, wie ich meine errorHandler-Middleware dazu bringen kann, den HTML-Fehler der swagger-tools abzufangen und damit zu überschreiben, wäre mir sehr verbunden. Ich habe meine Frage auch in den Apigee-Community-Foren veröffentlicht, da sie Teil eines Apigee-127-Projekts ist.https: //community.apigee.com/questions/29267/swagger-tools-error-handler-middleware-not-catchin.htm

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage