【问题标题】:How to extend a Joi schema?如何扩展 Joi 模式?
【发布时间】:2019-12-06 11:50:07
【问题描述】:

我有一个名为 user 的 joi 模式

const user = {
  firstName: Joi.string()
    .min(2)
    .max(50)
    .required()
    .label('First Name'),
  lastName: Joi.string()
    .min(3)
    .max(50)
    .required()
    .label('Last Name'),
  email: Joi.string()
    .allow('')
    .email({ minDomainAtoms: 2 })
    .max(100)
    .label('Email Address'),
}

我还有一个叫 owner

const ownerSchema = {
  firstName: Joi.string()
    .min(2)
    .max(50)
    .required()
    .label('First Name'),
  lastName: Joi.string()
    .min(3)
    .max(50)
    .required()
    .label('Last Name'),
  email: Joi.string()
    .allow('')
    .email({ minDomainAtoms: 2 })
    .max(100)
    .label('Email Address'),
  number: Joi.string()
    .regex(/[0-9]/)
    .length(10)
    .required()
    .label('Phone Number'),
  dateOfBirth: Joi.date(),

  kycDetails: Joi.array()
    .items(schemaKyc)
    .required(),
  bankDetails: Joi.array()
    .items(schemaBank)
    .required(),
  licenceDetails: Joi.array()
    .items(schemaLicence)
    .required(),
  insuranceDetails: Joi.array()
    .items(schemaInsurance)
    .required()
};

如您所见,两者有三个共同的字段,我希望能够在所有者中使用用户架构,并且每当我对用户进行更改时,我希望它也反映在所有者中。

【问题讨论】:

    标签: javascript reactjs joi


    【解决方案1】:

    您可以使用object.keys([schema]),其中

    设置或扩展允许的对象键,其中:

    • schema - 可选对象,其中每个键都分配有一个 joi 类型的对象。 如果schema{},则不允许使用任何键。如果schemanullundefined,任何 允许的密钥。如果schema 是带有键的对象,则将键添加到 任何先前定义的键(但如果所有键都缩小选择范围 以前允许)。默认为“未定义”,允许任何孩子 键。

    例子:

    const base = Joi.object().keys({
        a: Joi.number(),
        b: Joi.string()
    });
    // Validate keys a, b and c.
    const extended = base.keys({
        c: Joi.boolean()
    });
    

    【讨论】:

      【解决方案2】:

      你可以在spreaduser里面ownerSchema

      const ownerSchema = {
          ...user,
          /* owner specific fields goes here */
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 2023-03-17
        • 2019-03-05
        • 2018-06-05
        • 1970-01-01
        • 2018-12-09
        • 2019-06-15
        • 1970-01-01
        相关资源
        最近更新 更多