Joi 验证显示自定义错误消息

问题描述

您好,我正在使用 "@hapi/joi": "^15.1.1"。很遗憾,我现在无法更新到最新的 Joi 版本。

这是我的验证架构

 const schema = {
    name: Joi.string()
      .allow("")
      .max(30),addLine1: Joi.string()
      .required()
      .label("Address Line 1"),locality: Joi.string()
      .required()
      .label("City"),region: Joi.string()
      .required()
      .label("State"),zipCode: Joi.number()
      .required()
      .label("Zip Code"),phoneNo: Joi.string()
      .required("required")
      .regex(/^[0-9]{3}\-[0-9]{3}\-[0-9]{4}$/)
      
  };

然后我验证并显示发生的第一个错误

const result = Joi.validate(this.state.addressDetails,this.schema,{
      abortEarly: true,});
 return const errors = result.error.details[0].message;

这有效。唯一的问题是我想显示自定义错误消息而不是错误消息。

地址的错误消息是 "Address Line 1" is not allowed to be empty" 而不是这个,我想显示 "Address is required!"

对于正则表达式,认是

phoneNo with value "555" fails to match the required pattern: /^[0-9]{3}\-[0-9]{3}\-[0-9]{4}$/

相反,我想显示 please enter a valid phone number

我如何使用版本 15.1.1 实现这一点。 较新的版本 messages 在这里无济于事。

解决方法

尝试从 .error 回调中返回消息

  addLine1: Joi.string()
      .required()
      .label("Address Line 1").error(()=>'"Address Line 1" is not allowed to be empty'),