按条件验证两个Joi模式-无效的模式内容
创始人
2024-11-08 02:00:40
0

使用 Joi 的 when 方法来按条件验证两个模式。

示例代码:

const Joi = require('joi');

// 定义两个模式,用于验证不同情况下的数据
const schema1 = Joi.object({
  name: Joi.string().required(),
  age: Joi.number().min(18),
});

const schema2 = Joi.object({
  name: Joi.string().required(),
  email: Joi.string().email().required(),
});

// 定义用于判断需要验证哪个模式的方法
const isConditionMet = (data) => {
  // 判断数据中是否有 email 字段
  return data.email !== undefined;
};

// 根据条件选择需要验证的模式
const schemaToUse = Joi.when(Joi.object({}), {
  then: Joi.when(Joi.object({
    email: Joi.any().required(),
  }), {
    then: schema2,
    otherwise: schema1,
  }),
});

// 测试数据
const data1 = { name: 'John', age: 25 };
const data2 = { name: 'Mary', email: 'mary@example.com' };

// 验证数据
const result1 = schemaToUse.validate(data1);
const result2 = schemaToUse.validate(data2);

console.log(result1); // 通过,返回 { value: { name: 'John', age: 25 } }
console.log(result2); // 通过,返回 { value: { name: 'Mary', email: 'mary@example.com' } }

在上面的示例中,我们定义了两个模式 schema1schema2,用于验证不同情况下的数据。然后,我们使用 Joi.when 方法来根据条件选择需要验证的模式。具体来说,我们通过定义一个 isConditionMet 方法来判断数据中是否有 email 字段,如果有,则使用 schema2 来验证数据,否则使用 schema1。最后,我们可以使用 schemaToUse 来验证数据,无论数据中是否有 email 字段,都可以得到正确的

相关内容

热门资讯

必备透视!wepoker透视有... 必备透视!wepoker透视有吗!竟然有辅助教程(真是有挂)-哔哩哔哩1、点击下载安装,wepoke...
解谜透视!红龙poker辅助工... 解谜透视!红龙poker辅助工具!其实真的是有辅助插件(有挂秘笈)-哔哩哔哩1、下载好红龙poker...
必备透视!pokemmo辅助脚... 必备透视!pokemmo辅助脚本!都是是真的有辅助神器(存在有挂)-哔哩哔哩所有人都在同一条线上,像...
教你透视!pokemmo辅助器... 教你透视!pokemmo辅助器!真是是真的有辅助app(有挂技术)-哔哩哔哩1、完成pokemmo辅...
专业透视!德州透视是真的假的!... 专业透视!德州透视是真的假的!一直存在有辅助工具(有挂秘笈)-哔哩哔哩1、德州透视是真的假的破解器简...
解迷透视!德州局脚本!竟然一直... 解迷透视!德州局脚本!竟然一直都是有辅助方法(有挂教程)-哔哩哔哩1、打开软件启动之后找到中间准星的...
分享透视!聚星ai辅助工具下载... 分享透视!聚星ai辅助工具下载!原来有辅助神器(有挂秘笈)-哔哩哔哩1、超多福利:超高返利,海量正版...
科普透视!werplan外开挂... 科普透视!werplan外开挂!总是真的有辅助技巧(有挂方略)-哔哩哔哩1、下载好werplan外开...
普及透视!智星德州有脚本吗!本... 普及透视!智星德州有脚本吗!本来一直总是有辅助工具(有挂技术)-哔哩哔哩1、智星德州有脚本吗辅助软件...
分享透视!佛手在线是不是有挂!... 分享透视!佛手在线是不是有挂!真是真的是有辅助技巧(新版有挂)-哔哩哔哩佛手在线是不是有挂辅助器是一...