2017-10-05 1 views
0

Ich baue eine Hapi-Swagger-Schnittstelle zu meiner API. Einer der Abfrageparameter, Typ, hat eine andere Abfrage param Subtyp, die auf dem ehemaligen abhängt. Ich habe herausgefunden, wie man Joivalidation for it successfully implementieren, aber bin nicht so erfolgreich mit der Schnittstelle. Mein Validierungscode istAbfrageparameter abhängig von anderen Abfrageparametern in 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') 
} 

Aber die Schnittstelle zeigt nur png und jpg für Subtyp. Vorschläge dazu, wie ich das umsetzen könnte, so dass der richtige Subtyp zeigt, wenn der entsprechende Typ gewählt wird?

Antwort

0

Ich habe etwas ähnliches versucht und es funktioniert gut für mich. Bitte beachten Sie meine Code unten:

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') }), 
}); 

Und meine Nutzlast sieht aus wie folgt:

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

Der Fehler I ist wie folgt:

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

Bitte lassen Sie mich wissen, was genau Sie sind versuchen zu erreichen und mit welchem ​​Problem konfrontieren Sie sich.

+0

Wie ich in meiner Frage erwähnt habe, kann ich die Validierung erfolgreich durchführen. Wo ich versage (oder vielmehr, das 'Hapi-Swagger'-Modul versagt), baut ich die Schnittstelle korrekt auf. Also, ich denke, das ist eher eine "Hapi-Swagger" -Frage als eine "Joi" -Frage. Speziell in meinem Fall zeigt das Dropdown-Menü für ** Untertyp ** nur * png * und * jpg * als Optionen. – punkish

+0

oh jetzt bekomme ich deine Probleme. Meines Erachtens ist es etwas mit dem hier erwähnten Problem verbunden (https://github.com/glennjones/hapi-swagger/issues/33#issuecomment-180465799). –

Verwandte Themen