[英]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
為{}
不允許使用任何鍵。 如果schema
為null
或undefined
,則允許使用任何鍵。 如果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.