web-dev-qa-db-ja.com

Joiバリデーターの条件付きスキーマ

リクエストクエリのキーに応じて Joi validator を使用してnode jsでAPIリクエストクエリを検証する動的スキーマを作成する必要があります。下記のパターンが私の有効なクエリであるとしましょう。

hapi/joiバージョン16.1.8を使用しています

組み合わせ1

{ type: 1, firstname: 'user first name', lastname: 'user last name'}

組み合わせ2

{ type: 2 , salary: 1000, pension: 200}

組み合わせ3

{ type: 3 , credit: 550, debit: 100}

ご覧のとおり、オブジェクトキーはtypeの値によって異なります。これを適切に処理するにはどうすればよいですか?

Joi.alternatives を使用して2つの条件を処理できます。

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()
    })
});

しかし、これはどのように3つの条件で実行できますか?

4
Nitheesh

わたしにはできる!

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