You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JOI校验返回ValidationError: "value" must be of type object的原因是什么

报错原因

你在validateStuff中定义的是Joi.object()类型的校验规则,要求校验的目标必须是包含name字段的对象,但你调用方法时传入的是req.body.name(也就是Postman请求里的纯字符串al),校验目标类型不匹配,因此触发"value" must be of type object错误。

修复方案

提供两种可行调整方式,按需选择即可:

方案1:传入完整请求体对象(推荐)

保持现有校验规则不变,修改调用validateStuff的入参为整个req.body对象,适配object类型的校验要求:

app.post("/api/courses", (req, res) => {
  // 此处修改为传入完整req.body对象,而非单独的name字段
  const { error, value } = validateStuff(req.body);
  console.log(`error: ${error}
  value: ${value}`);
}); // 原代码缺少此处的闭合大括号,注意补全

validateStuff = (course) => {
  const schema = Joi.object({
    name: Joi.string().min(3).required(),
  });
  return schema.validate(course);
};

调整后再次发起请求,会正常返回name字段长度不足3的校验错误,符合预期逻辑。

方案2:调整校验规则为字符串类型

如果业务场景仅需要校验单个name字符串,可以修改schema为直接校验字符串类型:

validateStuff = (courseName) => {
  // 移除外层Joi.object,直接定义字符串校验规则
  const schema = Joi.string().min(3).required();
  return schema.validate(courseName);
};

额外提示:你贴出的原始代码中app.post的回调函数缺少闭合大括号,实际运行时会触发语法错误,请记得补全。

内容的提问来源于stack exchange,提问作者notARobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:45:02