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

Joi条件调用.required()不生效 自定义schema生成函数问题咨询

问题原因

Joi 的 Schema 对象是*不可变(Immutable)*的,所有对规则的修改方法(比如 .required()、.min()、.pattern() 等)都不会修改原实例,而是返回一个追加了新规则的全新Schema实例。
你第一版代码里调用了 schema.required() 但没有将返回的新实例重新赋值给 schema 变量,最终返回的还是最开始没有追加必填规则的原始实例,所以规则不生效。

修复方案

直接把规则方法返回的新实例重新赋值给变量即可,不需要重复声明Joi.string(),也支持后续动态追加任意其他规则:

function myString(required) {
  let schema = Joi.string();

  if (required) {
    // 把返回的新实例重新赋值给schema
    schema = schema.required();
  }
  
  // 后续要加其他规则也可以按同样逻辑处理,例如:
  // if (minLength) schema = schema.min(minLength);
  // if (regexp) schema = schema.pattern(regexp);

  return schema;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:15:05