【问题标题】:Joi validate one of two schemasJoi 验证两种模式之一
【发布时间】:2022-01-05 16:42:10
【问题描述】:

我有一个简单的对象,我想验证的字段很少。我希望允许或特定的验证架构或 所有 的属性具有空值

我创建了以下两个架构:

 const nonEmptyUserInfoValidationSchema = Joi.object({
    url: Joi.string().uri().required(),
    username: Joi.string().required().min(usernameMinLength),
    password: Joi.string().required().min(passwordMinLength),
});

const emptyUserInfoValidationSchema = Joi.object({
    url: Joi.string().empty().required(),
    username: Joi.string().empty().required(),
    password: Joi.string().empty().required(),
});

我希望创建一个模式来验证是否应用了emptyUserInfoValidationSchemanonEmptyUserInfoValidationSchema,但我不知道该怎么做,有什么建议吗?

允许:

{url:"http://some.url", username:"some username", password:"some password"}
{url:"", username:"", password:""}

不允许:

{url:"http://some.url",  username:"", password:""}

【问题讨论】:

    标签: javascript typescript joi


    【解决方案1】:

    我希望这可以帮助您在 Joi 中使用 when 条件

    var schema = Joi.object({
      url : Joi.any().when('username',{is: Joi.empty(),
    then: Joi.empty().required(),otherwise: Joi.string().required()}),
    username: Joi.when('password',{is: Joi.empty(),
    then: Joi.empty(),otherwise: Joi.string().required().min(usernameMinLength)})
    });
    

    这里是当文档Joi When Condtion的链接

    【讨论】:

    • 谢谢,但这不是我想要的,因为几乎不可能处理大对象(即使现在用一个简单的对象也不能覆盖所有边缘情况)。跨度>
    【解决方案2】:

    嗯,我终于找到了我要找的东西joi.alternatives

    export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );
    

    似乎可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 2021-04-16
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多