Ich habe ein Formular mit drei Feldern, das aus einem Namensfeld, einem E-Mail-Feld und einem Textfeld besteht. Ich benutze Joi 4.7.0 Version zusammen mit hapijs. Ich benutze das Objekt unten, um die Eingabe zu validieren. Ich erhalte das Datenobjekt von einem Ajax-Aufruf. Wenn ich alle drei Felder mit falschen Informationen fülle, bekomme ich nur die Nachricht bezüglich des ersten falschen Feldes. So:
%Vor% %Vor%Zur Erklärung nehmen wir an, das drei Feld nicht zu füllen. Ich bekomme nur einen Nachrichtenfehler und nicht den Nachrichtenfehler der anderen Felder. Warum?
Das passiert, weil Joi standardmäßig vorzeitig abbricht.
abortEarly
- wenntrue
, stoppt die Validierung beim ersten Fehler, andernfalls werden alle gefundenen Fehler zurückgegeben. Der Standardwert isttrue
.
* EDIT: Die Konfiguration hat sich in hapi 8.0 geändert. Sie müssen abortEarly: false
zur routes
config:
* Weitere Informationen finden Sie in der Joi API-Dokumentation mehr Details.
* Siehe auch validation
unter Hapi-Routenoptionen .
Also stoppt Joi die Validierung beim ersten Fehler:
%Vor%Ausgaben:
%Vor% Sie können Hapi jedoch so konfigurieren, dass alle Fehler zurückgegeben werden. Dazu müssen Sie abortEarly
auf false
setzen. Sie können dies in der Serverkonfiguration tun:
Wenn Sie das Skript jetzt ausführen, erhalten Sie:
%Vor% Der Schlüssel validation
funktioniert nicht mehr mit dem Konstruktor Hapi.Server
in Hapi 8.0:
[1] Validierung ist nicht erlaubt
Ich fand die Lösung in einem GitHub-Problem für hapi :
%Vor% Ich integriere nicht mit hapi.js, aber ich habe festgestellt, dass es ein ValidationOptions
-Objekt gibt, das weitergegeben werden kann. In diesem Objekt befindet sich die Option abortEarly
, also sollte dies funktionieren:
Joi.validate(request, schema, {abortEarly: false}
Dies kann auch wie folgt konfiguriert werden:
%Vor% Sehen Sie sich diese Typdefinitionen für weitere ValidationOptions
an:
Ссылка
Tags und Links validation hapijs