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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:08:51