2017-03-29 3 views
2

は、このような定義を考える:定義されたフィールドのセットから少なくとも1つのフィールドを要求することはできますか?

const querySchema = joi.object({ 
    one: joi.string().min(1).max(255), 
    two: joi.string().min(1).max(255), 
    three: joi.string().min(1).max(255), 
}); 

これらのフィールドの少なくとも1を要求する方法はありますか?私はどちらが気にしない。

注:SO questionのソリューションは、7つのフィールドがあるので私には役に立たず、成長する可能性があります。そのため、すべての可能な組み合わせを行うことは中止です。

Joi API Referenceにはこのユースケースに役立つ可能性のあるメソッドが見つかりませんでした。

ご協力いただきまして誠にありがとうございます。

答えて

1

本当にの場合は、どちらが必要なのかわからない場合は、object().min(1)を使用してオブジェクトに少なくとも1つのキーがあることを確認してください。

const querySchema = joi.object({ 
    one: joi.string().min(1).max(255), 
    two: joi.string().min(1).max(255), 
    three: joi.string().min(1).max(255), 
}).min(1); 

少なくとも1つのキー(onetwothree)が必要とされなければなりません。それらと異なる名前のキーは拒否されます。

1

は、@Ankhによって提案された1以外にそれを行うための別の方法を見つけdocumentationにあったが、私は前にそれを見つけることができませんでした:

const schema = joi.object({ 
    a: joi.number(), 
    b: joi.number(), 
}).or('a', 'b'); 

1は、特定のセットを必要とする必要がある場合、このメソッドは良いです私はこの質問のタイトルと多くのキーを持っているので、要件がexacltyであるときに@ Ankh'sは良いですが、私は正しいものとして自分の答えを選択しています。

これを行うには別の方法を残したかっただけです。

関連する問題