2017-10-05 4 views
0

내 API에 hapi-swagger 인터페이스를 구축하고 있습니다. 쿼리 매개 변수 중 하나 인 유형이이고 다른 쿼리 매개 변수 하위 형식이인데이 쿼리 매개 변수는 이전 쿼리 매개 변수에 따라 다릅니다. 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'질문보다는 'hapi-swagger'질문에 더 가깝다고 생각합니다. 구체적으로, 필자의 경우 ** subtype ** 드롭 다운 메뉴는 옵션으로 * png * 및 * jpg * 만 표시합니다. – punkish

+0

오, 이제 당신 문제를 얻었습니다. 내게 따르면이 문제와 관련된 내용은 [여기] (https://github.com/glennjones/hapi-swagger/issues/33#issuecomment-180465799) –