【问题标题】:how to validate two joi schema objects如何验证两个 joi 模式对象
【发布时间】:2022-01-01 17:20:45
【问题描述】:

我有两个用户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);

这可行,但如果有另一种方法可以验证manager 的架构和仅customer 的commonSchema,而不使用options.({ allowUnknown: true })。因为我不想允许所有未知字段。

【问题讨论】:

  • 你用代码定义这个,你不能使用你传递给Joi.object()的同一个对象两次吗?

标签: node.js npm joi


【解决方案1】:

一个简单易行的解决方案是将公共字段定义为字段而不是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);

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2016-10-11
    • 2017-08-05
    相关资源
    最近更新 更多