如何验证两个 joi 模式对象

how to validate two joi schema objects

我有两个 用户 customermanagermanager 在其模式中有一些额外的字段。为此,我创建了两个 joi 模式对象:

  1. 验证通用模式(针对客户和经理)和
  2. 正在验证经理的一些额外字段。

对于 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);