快速验证返回错误的响应错误代码
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);
});
我正在使用快速验证来验证请求字段。除了 响应错误代码 .
之外,一切正常我有以下代码:
//
// 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);
});