我正在使用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。 有什么解决办法?
答案 0 :(得分:0)
解决方法是,您可以在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
将不匹配。这有点令人困惑!哪部手机?是member2还是member 1?现在让我们尝试使用.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