Express -валификация возвращает неправильный код ошибки ответа - PullRequest
0 голосов
/ 22 января 2020

Я использую Express -validation для проверки полей запроса. все работает как положено, кроме кода ошибки ответа .

У меня есть следующий код:

//
// ValidationLeaner.js
const Joi = require('joi');

module.exports = {
  body: {
    name: Joi.string().min(3).max(20).required(),
    classifierId: Joi.number().integer().positive().required()
  }
}

//Route.js
const { Router } = require('express')
const Validate = require('express-validation')
const ValidationLearner = require('./ValidationLeaner')

const router = Router()

router.route('/').post(Validate(ValidationLearner), ...someFunction)

module.exports = router

При отправке запроса POST с телом: {name: "Leaner01", classifierId: false}. Я получаю следующий ответ, который является правильным:

{
  "status": 400,
  "statusText": "Bad Request",
  "errors": [
     {
       "field": [ "classifierId" ],
       "location": "body",
       "messages": [ "\"classifierId\" must be a number" ],
       "types": [ "number.base" ]
      }
  ]
}

К сожалению, код ответа 500 Внутренняя ошибка сервера , а не 400 , как указано в теле ответа.

Как мы можем заставить Express -валификацию отправить тот же код ответа, который указан в теле (статус: 400)?

Ответы [ 2 ]

1 голос
/ 22 января 2020

У вас есть дескриптор ошибки в вашем основном файле (индекс, приложение или сервер. js), потому что в документах express -validation это требуется.

Можете ли вы добавить этот обработчик ошибок (или отредактировать его, если он у вас уже есть) в свой основной файл (индекс, приложение или сервер. js) и повторить попытку?

const Validate = require("express-validation");

app.use(function(err, req, res, next) {
  // specific for validation errors
  if (err instanceof Validate.ValidationError)
    return res.status(err.status).json(err);

  // other type of errors, it *might* also be a Runtime Error
  return res.status(500).send(err.stack);
});
1 голос
/ 22 января 2020

Я считаю, что изменение этой строки

const {ValidationLearner} = require ('./ ValidationLeaner')

в

const ValidationLearner = require ('./ ValidationLeaner')

изменит результат. Потому что в первом случае ValidationLearner не определен, поскольку ValidationLearner. js (это ValidationLeaner. js или ValidationLearner. js) экспортирует объект, имеющий свойство первого уровня с именем body, а не ValidationLearner.

...