问题描述
我正在使用 joi v17.4.1 来验证 post 输入正文参数,但我只想将所需的参数放入 JOi Schema 中 例如,对于注册,我只需要用户名、电子邮件和密码是强制性的,所有其他参数都是选项。 所以我正在创建 joi 架构,如:
const registerUserValidator = async (body) => {
const schema = Joi.object().keys({
username: Joi.string()
.alphanum()
.min(3)
.max(30)
.required(),password: Joi.string()
.pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),repeat_password: Joi.ref('password'),email: Joi.string()
.email({ minDomainSegments: 2,tlds: { allow: ['com','net'] } })
})
用户可以发帖:
{
"username":"myuserName","name":"Test Name","email":"test@email.com","phone":"00000000","password":"12345","repeat_password":"12345",}
我收到错误:
{
"messeage": "\"name\" is not allowed"
}
>请帮忙
解决方法
只需使用 Joi.allow() 添加其他字段,如下所示:
const registerUserValidator = async (body) => {
const schema = Joi.object().keys({
username: Joi.string()
.alphanum()
.min(3)
.max(30)
.required(),password: Joi.string()
.pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),repeat_password: Joi.ref('password'),email: Joi.string()
.email({ minDomainSegments: 2,tlds: { allow: ['com','net'] } }),//add this in your code
phone:Joi.allow(),name:Joi.allow()
})