2017-10-05 12 views
0

私は自分のAPIにhapi-swaggerインタフェースを構築しています。クエリパラメータの1つであるのタイプがの場合、別のクエリパラメータサブタイプがあります。私はJoivalidation for it successfullyを実装する方法を考え出しましたが、インターフェイスでうまくいかないです。私の検証コードはクエリパラメータは、hapi-swaggerの他のクエリパラメータに依存します。

{ 
    type: Joi.string() 
     .valid('image', 'publication', 'dataset') 
     .optional(), 

    subtype: Joi.string() 
     .optional() 
     .when('type', {is: 'image',  then: Joi.valid('png', 'jpg')}) 
     .when('type', {is: 'publication', then: Joi.valid('newspaper', 'book')}) 
     .description('subtype based on the file_type') 
} 

である。しかしインタフェースはサブタイプのためだけPNGJPGを示しています。どのようにこれを実装できるかに関する提案サブタイプは、それぞれタイプが選択されたときを示していますか?

答えて

0

私は似たようなことを試してみました。以下の私のコードチェックアウトしてください:

Joi.object().keys({ 
    billFormat: Joi.string().valid('sms', 'email').required(), 
    email: Joi.string() 
    .when('ebillFormat', { is: 'sms', then: Joi.valid('a', 'b') }) 
    .when('ebillFormat', { is: 'email', then: Joi.valid('c', 'd') }), 
}); 

をそして、私のペイロードは、以下のようになります。

{ 
    "ebillFormat": "email", 
    "email": "hello" 
} 

次のように私が手にエラーがある:

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "child \"email\" fails because [\"email\" must be one of [c, d]]", 
    "validation": { 
     "source": "payload", 
     "keys": [ 
      "email" 
     ] 
    } 
} 

私はあなたが正確に何を教えてくださいあなたが直面している課題と達成しようとしている。

+0

私が私の質問で述べたように、私は検証をうまくやり遂げることができます。私が失敗している(あるいはむしろ、 'hapi-swagger'モジュールが失敗している)、インターフェイスを正しく構築しています。だから、これはJoiの質問ではなく、もっと嫌な質問であると思います。具体的には、私の場合、**サブタイプ**のドロップダウンメニューはオプションとして* png *と* jpg *のみを表示します。 – punkish

+0

ああ、今私はあなたの問題を取得します。私の話によれば、[ここ](https://github.com/glennjones/hapi-swagger/issues/33#issuecomment-180465799) –

関連する問題