如何解决如何在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}$/"
我不想在错误消息中显示正则表达式模式。因此,我尝试为密码字段设置自定义错误消息,但仍显示正则表达式模式。
import Joi from "joi";
export default Joi.object().keys({
email: Joi.string().email().required().label("Email"),username: Joi.string().alphanum().min(4).max(20).required().label("Username"),name: Joi.string().min(4).max(256).required().label("Name"),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",}),});
我认为它不是通过object.regex
选择正则表达式。请帮忙。
解决方法
要知道抛出了什么错误,可以调试错误对象(通过记录错误对象),然后找到错误type
。
示例:
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,details
有2个错误,并且abortEarly
设置为false。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。