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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:11