J'ai besoin de créer un schéma dynamique pour valider ma requête de demande d'API dans node js
using Joi validator en fonction d'une clé dans la requête de requête. Dites que le modèle mentionné ci-dessous est mes requêtes valides.
J'utilise hapi/joi
version 16.1.8
Combinaison 1
{ type: 1, firstname: 'user first name', lastname: 'user last name'}
Combinaison 2
{ type: 2 , salary: 1000, pension: 200}
Combinaison 3
{ type: 3 , credit: 550, debit: 100}
Comme vous pouvez le voir, les clés d'objet varient en fonction de la valeur de type
. Comment cela peut-il être géré correctement?
Nous pouvons gérer deux conditions en utilisant Joi.alternatives comme
const schema = Joi.alternatives().conditional(Joi.object({ type: 1 }).unknown(), {
then: Joi.object({
type: Joi.string(),
firstname: Joi.string(),
lastname: Joi.string()
}),
otherwise: Joi.object({
type: Joi.number(),
salary: Joi.any(),
pension: Joi.any()
})
});
Mais comment cela peut-il être fait pour 3 conditions?
Ça marche pour moi!
var Joi = require('joi');
var schema = {
a: Joi.any().when('b', { is: 5, then: Joi.required(), otherwise: Joi.optional() }),
b: Joi.any()
};
var thing = {
b: 5
};
var validate = Joi.validate(thing, schema);
// returns
{
error: null,
value: {
b: 5
}
}
https://github.com/hapijs/joi/issues/194#issuecomment-43582361