J'essaie de créer un schéma imbriqué dans joi et cela génère une erreur
[Erreur: le schéma d'objet ne peut pas être un schéma joi]
var nestedSchema = joi.object({
b: joi.number()
});
var base = joi.object({
a: joi.string(),
nestedData:joi.object(nestedSchema)
});
Comment définir un schéma imbriqué dans joi?
Vous pouvez utiliser object.keys API
var nestedSchema = joi.object().keys({
b: joi.number()
});
var base = joi.object({
a: joi.string(),
nestedData: nestedSchema
});
Bien que la réponse de Francesco fonctionne, il n'est pas nécessaire d'utiliser object.keys()
. L'erreur que le créateur de la question faisait était de passer un schéma en tant que paramètre à joi.object()
.
Ainsi, la création de schémas imbriqués est aussi simple que l'attribution d'un schéma à une clé appartenant à un autre schéma.
const schemaA = Joi.string()
const schemaB = Joi.object({ keyB1: schemaA, keyB2: Joi.number() })
const schemaC = Joi.object({
keyC1: Joi.string(),
keyC2: schemaB
})
Joi.validate({ keyC1: 'joi', keyC2: { keyB1: 'rocks!', keyB2: 3 } }, schemaC)
juste un conseil basé sur la réponse acceptée de Francesco:
si vous avez besoin de "nestedData" pour être requis -> "nestedData: nestedSchema.required ()" dans "base" ne fonctionnera pas, vous devez le définir directement sur "nestedSchema" comme tout autre paramètre
var nestedSchema = joi.object().keys({
b: joi.number()
})
.required();
var base = joi.object({
a: joi.string(),
nestedData: nestedSchema
});