我如何显示完整的属性路径 Joi 验证
How can i show the full attribute path Joi validation
我正在使用 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。
有什么解决办法吗?
解决方法您可以在 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]+)$/)
})
}
现在让我们假设 phone member.phone 有错误而 member2.phone 没有
验证输出将是 phone
不匹配。这有点混乱!哪个 phone ?是 member2 还是 member one?现在让我们尝试使用 .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
我正在使用 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。 有什么解决办法吗?
解决方法您可以在 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]+)$/)
})
}
现在让我们假设 phone member.phone 有错误而 member2.phone 没有
验证输出将是 phone
不匹配。这有点混乱!哪个 phone ?是 member2 还是 member one?现在让我们尝试使用 .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