Joi验证库中数组含特定值时的when条件is规则实现问题
解决Joi中when条件判断数组包含指定元素的问题
我来帮你搞定这个Joi的when条件配置问题!你需要实现的逻辑是:当field1数组至少包含'v1'时,允许field2为指定的object结构,否则禁止field2出现。其实用Joi内置的数组方法就能轻松实现这个判断。
核心思路
在when的is选项中,使用Joi.array().has('v1')来匹配“数组包含至少一个'v1'”的场景——这个方法会检查目标数组是否包含指定的元素,完全符合你的需求。
完整示例代码
const Joi = require('joi'); // 或者使用 ES Module: import Joi from 'joi' const schema = Joi.object({ field1: Joi.array().items(Joi.string().valid('v1', 'v2')).required(), field2: Joi.when('field1', { is: Joi.array().has('v1'), // 判断field1是否包含至少一个'v1' then: Joi.object().keys({ // 这里填写field2需要的结构,示例如下: subFieldA: Joi.string().required(), subFieldB: Joi.number().integer().min(0) }), otherwise: Joi.forbidden() // 不满足条件时禁止field2存在 }) });
补充说明
Joi.array().has('v1')会忽略数组中的其他元素,只要存在至少一个'v1'就会匹配成功;- 如果你的Joi版本较低(比如v16及以下),可以用
Joi.array().items(Joi.valid('v1')).min(1)替代,但has()方法在v17+中更直观简洁; - 若
field1是必填项,记得加上required(),否则当field1不存在时,when条件会默认不触发。
内容的提问来源于stack exchange,提问作者Caique Castro Soares da Silva
相关产品推荐
相关产品推荐

