swagger tools обработчик ошибок middleware не перехватывает ошибки

обзор

Мое специальное промежуточное программное обеспечение errorHandler не перехватывает ошибку средства проверки запросов swagger-tools. Вместо этого, HTML-ошибка swagger tools отправляется обратно клиенту. Как я могу получить свое промежуточное программное обеспечение errorHandler, чтобы перехватить ошибку проверки инструментов swagger и соответственно ответить клиенту?

мой прогноз

Я довольно невежественен, к сожалению. Независимо от того, куда я поместил директиву app.use (errorHandler), html-ошибка swagger tools возвращается клиенту, и моя функция errorHandler никогда не перехватывает ошибку.

Возможно я пропускаю что-то явно неправильное в моей настройке. Ниже приведен мой файл app.js, а ниже мой app.js - ответ HTML-сообщения об [нежелательных] инструментах swagger-tools, который возвращается клиенту. Опять же, я попытался поместить app.use (errorHandler) буквально (фигурально) везде, несмотря на тот факт, что приведенный ниже код показывает его только в двух местах.

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: 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
какие версии я использую?

узел:

node --version
v6.2.2

последние версии swagger-tools и express:

"swagger-tools": "^0.10.1",
"express": "^4.12.3"
близко

Любая помощь и / или понимание того, как заставить мое промежуточное программное обеспечение errorHandler перехватывать и, таким образом, переопределять ошибку html swagger-tools, было бы очень желательно. Я также разместил свой вопрос на форумах сообщества Apigee, так как он является частью проекта Apigee-127.https://community.apigee.com/questions/29267/swagger-tools-error-handler-middleware-not-catchin.html

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос