簡體   English   中英

如何擴展 Joi 模式?

[英]How to extend a Joi schema?

我有一個名為 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()
};

正如您所看到的,兩者都有三個共同的字段,我希望能夠在所有者中使用用戶架構,並且每當我對用戶進行更改時,我希望它也反映在所有者中。

您可以使用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()
});

只要你可以傳播user里面ownerSchema

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM