【问题标题】:Joi Schema should contain one field or anotherJoi Schema 应该包含一个或另一个字段
【发布时间】:2016-05-31 02:27:13
【问题描述】:

我正在研究使用 Joi 进行 api 验证。

我似乎无法确认我的架构是否正确,因为我希望电子邮件或手机都是必需的(但它们都不能为空/不存在) - 以下是否正确?

var schemaForRegistration = Joi.object().keys({
      email: Joi.string().email(),
      mobile:Joi.number().integer()
}).without('email', 'mobile');

谢谢

【问题讨论】:

    标签: javascript joi


    【解决方案1】:

    or() 可能是您所追求的。

    试试这个:

    const Joi = require('joi')
    
    const schema = Joi.object().keys({
        email: Joi.string().email(),
        mobile: Joi.number().integer()
    }).or('email', 'mobile')
    
    Joi.validate({ email: 'xxx@yyy.com', mobile: '999000999000' }, schema, console.log)
    Joi.validate({ mobile: '999000999000' }, schema, console.log)
    Joi.validate({ email: 'xxx@yyy.com' }, schema, console.log)
    Joi.validate({}, schema, console.log)
    

    最终验证将失败,因为电子邮件和手机都不存在。

    【讨论】:

    • 我想你错过了一个“x”,它是 xor('email', 'mobile')
    • 这个payload会失败:``` Joi.validate({ email: 'xxx@yyy.com', mobile: '' }, schema, console.log) ```跨度>
    • 如果还有 5-6 个键,那么“或”将如何解决目的?
    • @KartikeyaMishra 你知道如何处理更多的键吗?
    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2020-09-06
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多