我想知道为什么 JOI 同时返回错误和值:
app.post("/api/courses", (req, res) => {
const { error, value } = validateStuff(req.body.name);
console.log(`error: ${error}
value: ${value}`);
validateStuff = (course) => {
const schema = Joi.object({
name: Joi.string().min(3).required(),
});
return schema.validate(course);
};
postman POST request
{
"name":"al"
}
输出:
错误:验证错误:“值”必须是对象类型
值:al(我的帖子输入)
遇到这个问题,但原因与上面的其他答案不同。我的错误信息:
{"statusCode":400,"error":"Bad Request","message":"Error validating request payload","propertyErrors":{"value":"\"value\" must be of type object"}}
问题是我没有指定
Content-Type
标头,并且 node-fetch
推断类型为 text/plain;charset=UTF-8
,这导致了 joi
出现此错误。
一旦我设置了
'Content-Type': 'application/json'
,一切就顺利进行了。
如果你不想出现错误,你需要将
req.body
传递给 validateStuff。
您的代码立即从
name
属性传递字符串
或者您可以将 Joi 模式更改为
const Joi.string().min(3).required()
您的问题表明您想知道为什么 schema.validate 同时返回错误和值。
像您一样进行解构时
const { error, value} = schema.validate()
您可以执行以下操作,因为您可能在运行时出现错误或没有错误。
if (error) {
// handle error
// passed value might be needed
} else {
// validation successful
}
就我而言,我直接提供主体参数,而不是用花括号将其包裹起来......
const validationResult = schema.validate(req.body.name);
以下才是正确的做法
const validationResult = schema.validate({ name: req.body.name });