快速验证返回错误的响应错误代码

Express-validation returning wrong response error code

我正在使用快速验证来验证请求字段。除了 响应错误代码 .

之外,一切正常

我有以下代码:

//
// 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-validation 发送与正文中所述相同的响应代码(状态:400)?

我相信改变这条线

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

进入

const ValidationLearner = require('./ValidationLeaner')

会改变结果。因为在第一种情况下,ValidationLearner 是未定义的,因为 ValidationLearner.js(是 ValidationLeaner.js 还是 ValidationLearner.js)导出一个对象,该对象具有第一级 属性 命名主体而不是 ValidationLearner。

您的主文件(索引、应用程序或 server.js)中是否有错误句柄,因为在 express-validation 文档中它是必需的。

您能否将此错误处理程序(如果您已有,请对其进行编辑)添加到您的主文件(索引、应用程序或 server.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);
});