基于Joi实现根据type字段值条件验证values字段的需求
基于Joi实现依赖type字段的values条件验证
要实现values字段的验证规则随type字段动态变化的需求,你可以用Joi的when()方法完成条件式验证,以下是具体实现方案:
完整代码示例
const Joi = require('joi'); const validValues = { banana: ['001','002','003'], apple: ['111','122','133'] }; const schema = Joi.object({ type: Joi.string() .valid(...Object.keys(validValues)) .required(), // 为values字段添加条件验证规则 values: Joi.array() .when('type', { switch: Object.entries(validValues).map(([key, vals]) => ({ is: key, then: Joi.array().valid(...vals) })) }) }); // 测试错误载荷 const testPayload = { "type": "banana", "values": ["cvf"] }; const { error } = schema.validate(testPayload); if (error) { console.log(error.details[0].message); // 输出示例:"values[0]" must be one of [001, 002, 003] }
关键说明
when()是Joi实现条件验证的核心,这里通过switch语法遍历validValues的键值对,为每个type值匹配对应的values有效值列表values字段默认是可选的,无需额外声明optional()(Joi字段默认可选,除非显式添加required())- 当测试载荷中
type为banana但values包含不在['001','002','003']内的cvf时,会触发验证错误,完全符合预期
内容的提问来源于stack exchange,提问作者SunAns
相关产品推荐
相关产品推荐

