如何解决不允许在JOI中获取“语言”错误?
我最近迁移到了新的joi存储库(@ hapi / joi => joi)
现在我在运行服务器时遇到错误
throw new AssertError([result.error.details[0].message]); ^ Error: "language" is not allowed
我搜索了google和SO,但找不到解决方法
这是我的代码:
forgetUser: {
query: {
email: Joi.string().regex(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)
.required()
.options({ language: { string: { regex: { base: 'must be valid' } } } })
.label('Email')
}
},
请帮助我吗?
解决方法
这是由于您将未知字段传递给Joi模式而引起的。
例如,您具有以下Joi模式:
Joi.object({
name: Joi.string().required(),email: Joi.string().required(),});
,然后您传递此对象进行验证:
{
name: "John Doe",email: "johndoe@gmail.com",language: "en"
}
由于架构内不允许language
,因此验证将引发错误/失败。
为防止这种情况,您可以在Joi Schema上传递stripUnknown
选项,以便去除未知字段
Joi.object({
name: Joi.string().required(),}).options({ stripUnknown: true });
或者您可以传递allowUnknown
,以便它将忽略未知字段
Joi.object({
name: Joi.string().required(),}).options({ allowUnknown: true });
您可以阅读有关验证选项here
的更多信息 ,这个问题尚不清楚您要达到什么目的(也许添加更多细节?)。
如果您要验证电子邮件,已经有一个内置功能可以验证:string.email()。
如果您仍然想进行自定义的正则表达式匹配,也可以使用内置功能:string.pattern()。
如果要将内置错误消息替换为自定义错误消息,Joi会使用.messages()
来提供。在此处查看答案:https://stackoverflow.com/a/58234246/1499476。
基本上,您可以执行以下操作:
forgetUser: {
query: {
email: Joi.string().pattern(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)
.required()
.label('Email')
.messages({
'string.pattern.base': '{#label} must be valid',// --> Email must be valid.
'string.base': '{#label} should be a type of "text"',... // other customisations
})
}
},
string.pattern()
也可以用作别名string.regex()
(就像您已经在做的那样)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。