如何解决如何在 Mongoose 模型中呈现 *真正* 自定义正则表达式错误消息?
目前我在我的控制器方法中有这个工作:
const regex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})'
);
if (regex.test(req.body.password) === false) {
throw new Error(
'Your password must contain at least 8 characters: At least one number,at least one lower case letter,at least one upper case letter and at least one special character,like a fullstop.'
);
}
由于最佳实践表明必须在模型中完成数据清理,我想在那里进行验证,但似乎无法使用自定义错误消息使其正常工作。我尝试了一些不同的东西,最值得注意的是(在架构中):
validate: {
validator: function (v) {
return /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/.test(
v
);
},message: (props) => `${props.value} is not a valid password!`,},
我使用这种方法遇到的问题是,尽管您似乎在设置消息值,但在邮递员中,它似乎带有一些看起来很糟糕的垃圾,我似乎无法摆脱 I.E. “用户验证失败:密码:”:)
出于信息目的,我通过以下方式删除了指定为唯一字段的丑陋猫鼬错误消息:
userSchema.post('save',function (error,doc,next) {
if (error.name === 'MongoError') {
if (error.message.includes('screenname')) {
next(
new Error(
'A user with this screenname already exists. Please try another.'
)
);
} else if (error.message.includes('email')) {
next(new Error('A user with this email address already exists.'));
}
} else {
next(error);
}
});
不幸的是,同样的技术不适用于“验证”值。
谢谢。
解决方法
啊,我终于找到了解决办法:
userSchema.pre('save',async function (next) {
const user = this;
if (user.isModified('password')) {
const regex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})'
);
console.log('1',user.password,regex.test(user.password));
if (regex.test(user.password) === false) {
console.log('2');
next(
new Error(
'Your password must contain at least 8 characters: At least one number,at least one lower case letter,at least one upper case letter and at least one special character,like a fullstop.'
)
);
}
user.password = await bcrypt.hash(user.password,8);
}
next();
});
我希望对某人有所帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。