swagger-express-middleware: чистое сообщение проверки - PullRequest
0 голосов
/ 12 октября 2018

В настоящее время я использую пакет swagger-express-middleware для проверки запросов к моему документу Swagger API.

После их документа я реализовал промежуточное ПО иобработал ошибку, как показано ниже

createMiddleware(swaggerDoc, app, (middlewareError, middleware) => {
    app.use(middleware.metadata());
    app.use(middleware.parseRequest());
    app.use(middleware.validateRequest());

    // Error handler to send the swagger validation response
    app.use((err, req, res, next) => {
        res.status(err.status).json({
            type: 'SCHEMA VALIDATION FAILED',
            message: err.message
        });
    });
});

Если какая-либо ошибка в схеме, ответ, который я получаю от промежуточного программного обеспечения, имеет свойство message с описанием ошибки, которая, очевидно, является важной частью ответакак это говорит реквестеру, чего не хватает.К сожалению, содержание message не очень интуитивно понятно или читабельно.Например, если в запросе отсутствует свойство, описание будет

"message": "The \"pinDetails\" body parameter is invalid ({\"Pindd\":\"asd\"}) \nJSON Schema validation error. \nData path: \"\" \nSchema path: \"/required/0\" \nMissing required property: pin"

. Как видите, сообщение не очень интуитивное и чистое, что затрудняет его чтение.Итак, мой вопрос: предоставляет ли пакет какой-либо способ вернуть более чистую версию сообщения или каким-либо другим способом, которым я могу сделать то же самое?

Примечание. Поскольку сообщение является многострочным и, что наиболее важно, динамическим , я не могу просто разбить или заменить строки, иначе это будет выглядеть как несколько несвязанных предложений, собранных вместе (может быть, хужеесли это то, что я в конечном итоге сделаю, но определенно не то, что я бы предпочел).

1 Ответ

0 голосов
/ 12 октября 2018

Я открыл проблему в swagger-express-middleware и, основываясь на ответе (цитируемом ниже), кажется, что пока нет никакого способа (кроме, возможно, использования dataPath и schemaPath) для вывода более удобного сообщения.

Ссылка на проблему: https://github.com/APIDevTools/swagger-express-middleware/issues/120

Ответ разработчика на эту проблему:

Да, я согласен, что сообщения об ошибках не оченьудобный или простой для разбора.Ошибки в конечном итоге происходят из tv4 , который является валидатором схемы JSON, который я использую под капотом.TV4 добавляет несколько полезных свойств к своим объектам Error, таким как dataPath и schemaPath, которые могут помочь вам создать более удобное для пользователя сообщение.В будущем я планирую перейти на Z-Schema , которая имеет более качественные сообщения об ошибках и добавляет гораздо более полезные свойства к объектам Error, что делает намного более простым для создания пользовательскихдружеские сообщения.

Итак, пока я просто заменил все \ и \n на ., чтобы сделать его более читабельным.Затем я заменил все " на ', чтобы убедиться, что строка действительна.Например,

 res.status(err.status).json({
     type: 'SCHEMA VALIDATION FAILED',
     message: err.message.replace(/\r?\n|\r/g, '.').replace(/"/g, '\'')
 });

Очевидно, что это не полностью защищенное решение, но пока это улучшение.Ответ будет выглядеть так:

"message": "The 'pinDetails' body parameter is invalid ({'Pindd':'asd'}) .JSON Schema validation error. .Data path: '' .Schema path: '/required/0' .Missing required property: pin"
...