【问题标题】:How can i show the full attribute path Joi validation如何显示完整的属性路径 Joi 验证
【发布时间】:2018-10-14 19:13:00
【问题描述】:

我正在使用 Joi 验证,我有太多与正文中的其他属性相同的属性,我无法显示完整路径,它只是显示缺少某些内容,而不会让用户知道出了什么问题,看看以下

body: {
            member: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            }),
            member2: Joi.object().required().keys({
                id: Joi.string().required(),
                phone: Joi.string(),
                email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
            })
}

正如您在上面看到的那样,这两个成员具有应有的相同属性 如果缺少 id 它只显示 id 是必需的,无论在哪里丢失 如果缺少 member2 但我失败了,我正在尝试执行以下操作

{message:  member2.id is required}

不只是缺少显示 ID。 有什么解决办法吗?

【问题讨论】:

    标签: node.js validation joi


    【解决方案1】:

    作为解决方法,您可以在 JOI .lable 中使用.lable() 将解决此问题

    .label() 可以在运行时包装属性名称以进行验证。 例如

    body: {
                member: Joi.object().required().keys({
                    id: Joi.string().required(),
                    phone: Joi.string(),
                    email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                }),
                member2: Joi.object().required().keys({
                    id: Joi.string().required(),
                    phone: Joi.string(),
                    email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                })
    }
    

    现在让我们假设电话 member.phone 有错误,而 member2.phone 没有

    验证输出将是phone 不匹配。这有点混乱!哪个电话?是会员2还是会员一?现在让我们尝试使用.lable()

    body: {
                    member: Joi.object().required().keys({
                        id: Joi.string().required(),
                        phone: Joi.string().label('member.phone'),
                        email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                    }),
                    member2: Joi.object().required().keys({
                        id: Joi.string().required(),
                        phone: Joi.string().label('member2.phone'),
                        email: Joi.string().required().regex(/^([a-zA-Z0-9_\-\.]+)@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]+)$/)
                    })
        }
    

    现在的验证输出将是

    error member.phone doesn't match
    

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2015-05-16
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多