如何验证两个 joi 模式对象
how to validate two joi schema objects
我有两个 用户 customer
和 manager
。 manager
在其模式中有一些额外的字段。为此,我创建了两个 joi 模式对象:
- 验证通用模式(针对客户和经理)和
- 正在验证经理的一些额外字段。
对于 manager
验证,我必须验证两个 joi 模式对象。
const commonSchema = Joi.object({
name: Joi.string().min(3).max(255).required(),
email: Joi.string().email().required(),
password: Joi.string().min(3).max(15).required(),
...
}).options({ allowUnknown: true });
const managerSchema = Joi.object({
contactNumber: Joi.string()
.length(10)
.pattern(/^[0-9]+$/)
.required(),
creditCardNum: Joi.string().length(16).required(),
isApproved: Joi.boolean().default(false),
...
}).options({ allowUnknown: true });
const { errorOne } = commonSchema.validate(manager);
const { errorTwo } = managerSchema.validate(manager);
这可行,但如果有另一种方法可以在不使用 options.({ allowUnknown: true })
的情况下验证 manager
的架构和 customer
的通用架构。因为我不想允许所有未知字段。
一个简单易行的解决方案是将公共字段定义为字段而不是 joi object
。
请注意,在我的代码中,...
表示传播运算符。
const commonSchemaFields = {
name: Joi.string().min(3).max(255).required(),
email: Joi.string().email().required(),
password: Joi.string().min(3).max(15).required(),
};
const managerSchemaFields = {
...commonSchemaFields,
contactNumber: Joi.string()
.length(10)
.pattern(/^[0-9]+$/)
.required(),
creditCardNum: Joi.string().length(16).required(),
isApproved: Joi.boolean().default(false),
};
const commonSchema = Joi.object({...commonSchemaFields}).options({ allowUnknown: true });
const managerSchema = Joi.object({...managerSchemaFields}).options({ allowUnknown: true })
const { errorOne } = commonSchema.validate(manager);
const { errorTwo } = managerSchema.validate(manager);
我有两个 用户 customer
和 manager
。 manager
在其模式中有一些额外的字段。为此,我创建了两个 joi 模式对象:
- 验证通用模式(针对客户和经理)和
- 正在验证经理的一些额外字段。
对于 manager
验证,我必须验证两个 joi 模式对象。
const commonSchema = Joi.object({
name: Joi.string().min(3).max(255).required(),
email: Joi.string().email().required(),
password: Joi.string().min(3).max(15).required(),
...
}).options({ allowUnknown: true });
const managerSchema = Joi.object({
contactNumber: Joi.string()
.length(10)
.pattern(/^[0-9]+$/)
.required(),
creditCardNum: Joi.string().length(16).required(),
isApproved: Joi.boolean().default(false),
...
}).options({ allowUnknown: true });
const { errorOne } = commonSchema.validate(manager);
const { errorTwo } = managerSchema.validate(manager);
这可行,但如果有另一种方法可以在不使用 options.({ allowUnknown: true })
的情况下验证 manager
的架构和 customer
的通用架构。因为我不想允许所有未知字段。
一个简单易行的解决方案是将公共字段定义为字段而不是 joi object
。
请注意,在我的代码中,...
表示传播运算符。
const commonSchemaFields = {
name: Joi.string().min(3).max(255).required(),
email: Joi.string().email().required(),
password: Joi.string().min(3).max(15).required(),
};
const managerSchemaFields = {
...commonSchemaFields,
contactNumber: Joi.string()
.length(10)
.pattern(/^[0-9]+$/)
.required(),
creditCardNum: Joi.string().length(16).required(),
isApproved: Joi.boolean().default(false),
};
const commonSchema = Joi.object({...commonSchemaFields}).options({ allowUnknown: true });
const managerSchema = Joi.object({...managerSchemaFields}).options({ allowUnknown: true })
const { errorOne } = commonSchema.validate(manager);
const { errorTwo } = managerSchema.validate(manager);