如何在Joi Schema中移除对象特定键(id)的验证?
解决Joi移除Schema中特定键验证的问题
你用concat()的方法之所以无效,是因为concat()是合并两个Schema的规则,原Schema中id的required()约束会和新添加的optional()规则冲突,最终依然会保留必填要求,达不到移除验证的效果。
下面是两种可行的解决方案:
方法一:使用fork()替换目标键的验证规则
fork()方法可以直接修改Schema中指定字段的验证规则,用宽松规则覆盖原有约束:
const newSchema = schema.fork('id', () => Joi.any().optional());
修改后,id字段可以是任意类型,也可以完全不存在,彻底移除了原有的必填和字符串格式验证。
方法二:从Schema描述中重构(彻底移除键的定义)
如果你需要完全从Schema中移除id的验证定义,而非替换成宽松规则,可以通过describe()获取Schema的结构描述,删除目标键后重新构建:
// 获取原Schema的结构描述 const schemaDescription = schema.describe(); // 删除id对应的验证规则 delete schemaDescription.children.id; // 重新构建Schema const newSchema = Joi.object(schemaDescription.children);
这种方式生成的新Schema和原Schema结构完全一致,只是不再包含id字段的任何验证规则。
内容的提问来源于stack exchange,提问作者AnandShiva
相关产品推荐
相关产品推荐

