Hapi/Joi 无法将规则应用于空规则集或最后添加的规则不支持规则属性

Hapi/Joi Cannot apply rules to empty ruleset or the last rule added does not support rule properties

我正在尝试在用户登录时未输入密码时显示自定义消息。当我没有密码的自定义消息时,这工作正常:

const ValidationSchemas = Joi.object({
  name: Joi.string().min(6).required().messages({
      "string.empty":"Display name cannot be empty",
      "string.min":"Min 6 characteers"
  }).optional(),
  email: Joi.string().min(6).required().email().message("Must be a valid email address"),
  password:Joi.string().min(6).required()
})

但是当我尝试为空密码字段设置自定义消息时,我收到一条错误消息 - 无法将规则应用于空规则集或最后添加的规则不支持规则属性

这是我尝试为密码设置自定义消息的代码:

const ValidationSchemas = Joi.object({
  name: Joi.string().min(6).required().messages({
      "string.empty":"Display name cannot be empty",
      "string.min":"Min 6 characteers"
  }).optional(),
  email: Joi.string().min(6).required().email().message("Must be a valid email address"),
  password:Joi.string().min(6).required().message("Password is required!")
})

如何获得密码的自定义消息?非常感谢,非常感谢任何帮助。谢谢

试试这个:

const ValidationSchemas = Joi.object({    
    name: Joi.string()  
      .min(6)
      .required()
      .messages({
        'string.empty': 'Display name cannot be empty',
        'string.min': 'Min 6 characteers',
      })
      .optional(),
    email: Joi.string().min(6).required().email().message('Must be a valid email address'),
    password: Joi.string().required().min(6).message('Password is required!'),
  });

我遇到了同样的问题,后来我发现使用 message() 会终止当前的规则集,并且不能再跟另一个规则选项。

所以我没有使用 message(),而是使用了这个:messages({ 'any.only': 'GENERAL_MESSAGE_HERE' })

因此,对于您的情况,您应该将代码更改为:

const ValidationSchemas = Joi.object({
      name: Joi.string()
        .min(6)
        .required()
        .messages({
          'string.empty': 'Display name cannot be empty',
          'string.min': 'Min 6 characteers',
        })
        .optional(),
      email: Joi.string().min(6).required().email().messages({
        'any.only': 'Must be a valid email address',
      }),
      password: Joi.string()
        .min(6)
        .required()
        .messages({ 'any.only': 'Password is required!' }),
    })