Joi 错误:ValidationError:“值”必须是对象类型

问题描述 投票:0回答:3

我想知道为什么 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(我的帖子输入)

javascript joi
3个回答
6
投票

遇到这个问题,但原因与上面的其他答案不同。我的错误信息:

{"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'
,一切就顺利进行了。


3
投票

如果你不想出现错误,你需要将

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
}

0
投票

就我而言,我直接提供主体参数,而不是用花括号将其包裹起来......

const validationResult = schema.validate(req.body.name);

以下才是正确的做法

const validationResult = schema.validate({ name: req.body.name });
© www.soinside.com 2019 - 2024. All rights reserved.