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
相关产品推荐
相关产品推荐

