【问题标题】:Joi error: ValidationError: "value" must be of type objectJoi 错误:ValidationError:“值”必须是对象类型
【发布时间】:2022-02-06 03:40:46
【问题描述】:

我想知道为什么 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"
}

输出:

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

值:al(我的帖子输入)

【问题讨论】:

    标签: javascript joi


    【解决方案1】:

    如果您不希望出现错误,则需要将 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
    }
    

    【讨论】:

      【解决方案2】:

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

      {"statusCode":400,"error":"Bad Request","message":"Error validating request payload","propertyErrors":{"value":"\"value\" must be of type object"}}
      

      问题是我没有指定Content-Type 标头,而node-fetchinferring 类型为text/plain;charset=UTF-8,导致joi 出现此错误。

      一旦我设置了'Content-Type': 'application/json',一切都很顺利。

      【讨论】:

        猜你喜欢
        • 2021-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-09-24
        • 1970-01-01
        相关资源
        最近更新 更多