我正在使用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 Internal Server Error (内部服务器错误),而不是响应正文中指出的 400 。
我们如何使Express-validation发送正文中所述的相同响应代码(状态:400)?
答案 0 :(得分:1)
我相信更改此行
const {ValidationLearner} = require('./ ValidationLeaner')
进入
const ValidationLearner = require('./ ValidationLeaner')
将更改结果。因为在第一种情况下ValidationLearner是未定义的,因为ValidationLearner.js(是ValidationLeaner.js还是ValidationLearner.js)会导出具有名为body而不是ValidationLearner的第一级属性的对象。
答案 1 :(得分:1)
您的主文件(索引,app或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);
});