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

Joi验证问题:.or条件未生效,提示INVERTED_ROW必填

Joi .or() 规则失效提示字段必填的原因及解决方法

可能的原因及对应解决方式:

  • 全局验证选项强制所有字段必填
    如果你在调用validate()时传入了{ presence: 'required' }参数,Joi会强制要求schema中定义的所有字段必须存在,这会直接覆盖.or()的“至少存在一个”规则。比如:

    // 错误用法:该选项会让所有字段变为必填
    PAYLOAD.validate(yourPayload, { presence: 'required' });
    

    解决:移除这个全局选项,仅针对需要必填的字段单独设置.required()。

  • Schema被后续代码意外修改
    检查是否在定义PAYLOAD之后,对某个字段(比如INVERTED_ROW)添加了.required()约束,或者对整个schema调用了.required(),导致所有字段被强制要求存在。比如:

    // 错误示例:后续修改导致字段必填
    PAYLOAD.extract('INVERTED_ROW').required();
    // 或者
    PAYLOAD.required();
    

    解决:排查代码中对PAYLOAD的后续操作,确保没有额外添加必填规则。

  • Schema与其他带必填约束的Schema合并
    如果你的PAYLOAD通过.concat()等方法和其他Schema合并,而另一个Schema中对INVERTED_ROW设置了必填规则,也会触发这个错误。

验证排查步骤

可以先单独测试你的Schema,排除其他代码干扰:

const testPayload = {
  "BACK_EXTENSION": { "reps": 30, "exerciseId": 7 },
  "PUSH_UP": { "reps": 1, "exerciseId": 1 }
};
const { error } = PAYLOAD.validate(testPayload);
console.log(error); // 正常情况下应该输出undefined

如果测试无问题,说明问题出在验证选项或Schema的后续修改上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:55:55