リクエストクエリのキーに応じて 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つの条件で実行できますか?
わたしにはできる!
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