Javascript 如何比较joi中的两个字段?

Javascript 如何比较joi中的两个字段?,javascript,joi,Javascript,Joi,我尝试在两个字段之间进行验证foo和栏 两者都应该是字符串,但它们是可选的。如果它们有一些值,则最小值应为2,最大值应为10 如果两者都为空(“/null/undefined),则验证应失败并返回错误 我试着和你一起做 .when("bar", { is: (v) => !!v, then: Joi.string().required() }), 但不起作用错误返回未定义 你知道怎么解决吗 这是您需要如何配置才能实现的 empty(['',null]),将''和nu

我尝试在两个字段之间进行验证<代码>foo和

  • 两者都应该是字符串,但它们是可选的。如果它们有一些值,则最小值应为2,最大值应为10
  • 如果两者都为空(“/null/undefined),则验证应失败并返回错误
  • 我试着和你一起做

    .when("bar", { is: (v) => !!v, then: Joi.string().required() }),
    
    但不起作用
    错误
    返回
    未定义

    你知道怎么解决吗


    这是您需要如何配置才能实现的

  • empty(['',null])
    ,将
    ''
    null
    视为
    未定义的
  • 或(“foo”、“bar”)
    ,使其中一个是必需的
  • const schema=Joi.object({
    foo:Joi.string().empty(['',null]).min(2).max(10),
    条形图:Joi.string().empty(['',null]).min(2).max(10)
    
    })。或(“foo”、“bar”)您是否尝试了以下解决方案?
    const Joi = require("joi");
    
    console.clear();
    
    const schema = Joi.object({
      foo: Joi.string()
        .allow("", null)
        .optional()
        .min(2)
        .max(10)
        .when("bar", {
          is: (v) => !!v,
          then: Joi.string().required()
        }),
      bar: Joi.string().allow("", null).optional().min(2).max(10)
    });
    
    const { error } = schema.validate(
      { foo: null, bar: null },
      { allowUnknown: true, abortEarly: false }
    );
    
    const { error: error2 } = schema.validate(
      { foo: null, bar: "text" },
      { allowUnknown: true, abortEarly: false }
    );
    
    console.log({ error }); // should be with error.
    console.log({ error2 }); // should be undefiend.
    
    if (error) {
      const { details } = error;
      console.log({ details });
    }
    
    if (error2) {
      const { details } = error2;
      console.log({ details });
    }