web-dev-qa-db-fra.com

Schéma conditionnel du validateur Joi

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?

4
Nitheesh

Ç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

0
soamazing