Error handling 如何在joi中为正则表达式设置自定义消息

Error handling 如何在joi中为正则表达式设置自定义消息,error-handling,graphql,joi,Error Handling,Graphql,Joi,当我验证graphql参数时,密码字段会出现如下错误消息 "password" with value "" fails to match the required pattern: /^(?=\\S*[a-z])(?=\\S*[A-Z])(?=\\S*\\d)(?=\\S*[^\\w\\s])\\S{8,30}$/" 我不想在错误消息中显示正则表达式模式。因此,我试图为密码字段设置自定义错误消息,但它仍然显示正则表达式模式 从“Joi”导入Jo

当我验证graphql参数时,密码字段会出现如下错误消息

"password" with value "" fails to match the required pattern: /^(?=\\S*[a-z])(?=\\S*[A-Z])(?=\\S*\\d)(?=\\S*[^\\w\\s])\\S{8,30}$/"
我不想在错误消息中显示正则表达式模式。因此,我试图为密码字段设置自定义错误消息,但它仍然显示正则表达式模式

从“Joi”导入Joi;
导出默认Joi.object().键({
电子邮件:Joi.string().email().required().label(“电子邮件”),
用户名:Joi.string().alphanum().min(4).max(20).required().label(“用户名”),
名称:Joi.string().min(4).max(256).required().label(“名称”),
密码:Joi.string()
.min(8)
.regex(/^(?=\S*[a-z])(?=\S*[a-z])(?=\S*\d)(?=\S*[^\w\S])\S{8,30}$/)
.required()
.标签(“密码”)
.留言({
“string.min”:“必须至少有8个字符”,
“object.regex”:“必须至少有8个字符”,
}),
});

我认为它不是通过
object.regex
选择正则表达式。请提供帮助。

要知道抛出了什么错误,您可以调试错误对象(通过记录它),然后查找错误的
类型

例如:

const Joi = require('@hapi/joi');

const joiSchema = Joi.object().keys({
  password: Joi.string()
    .min(8)
    .regex(/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,30}$/)
    .required()
    .label("Password")
    .messages({
      "string.min": "Must have at least 8 characters",
      "object.regex": "Must have at least 8 characters",
      "string.pattern.base": "enter your custom error here..."
    })
});

const validationResult = joiSchema.validate({ password: "2" }, { abortEarly: false });
console.log(validationResult.error.details.map(errDetail => errDetail.type), validationResult.error);

这将输出
[“string.min”、“string.pattern.base”]
<由于string.min和string.pattern.base,code>details
有2个错误,并且
abortEarly
设置为false。

即使数据已经有效,也始终显示string.pattern.base。