我有兩個用戶 customer和manager. manager在其架構中有一些額外的欄位。為此,我創建了兩個 joi 架構物件:
- 驗證通用模式(針對客戶和經理)和
- 為經理驗證一些額外的欄位。
為了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,只為commonSchemacustomer不使用options.({ allowUnknown: true })。因為我不想允許所有未知欄位。
uj5u.com熱心網友回復:
一個簡單而簡單的解決方案是將公共欄位定義為欄位而不是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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/400237.html
