Ich bekomme "Http-Fehler-Antwort für (unbekannte url): 0 Unknown Error" anstelle der tatsächlichen Fehlermeldung in Angular
Ich bin mit Angular 4 HttpClient
, um Anfragen an externen Dienst zu senden. Es ist ein sehr Standard-Setup:
this.httpClient.get(url).subscribe(response => {
//do something with response
}, err => {
console.log(err.message);
}, () => {
console.log('completed');
}
Das Problem ist, wenn die Anfrage fehlschlägt, sehe ich eine generische Http failure response for (unknown url): 0 Unknown Error" in der Konsole. Wenn ich jedoch die fehlgeschlagene Anfrage in Chrome untersuche, sehe ich, dass der Antwortstatus 422 ist, und in der Registerkarte "Vorschau" sehe ich die eigentliche Nachricht, die die Fehlerursache beschreibt.
Wie kann ich auf die tatsächliche Antwortmeldung zugreifen, die ich in den Entwicklungswerkzeugen von Chrome sehen kann?
101
3
Das Problem stand im Zusammenhang mit CORS. Ich bemerkte, dass es einen weiteren Fehler in der Chrome-Konsole gab:
Das bedeutet, dass in der Antwort des Backend-Servers der
Access-Control-Allow-Origin
-Header fehlte, obwohl der Backend-Server nginx so konfiguriert war, dass er diese Header mit deradd_header
-Direktive zu den Antworten hinzufügt.Diese Anweisung fügt jedoch nur Header hinzu, wenn der Antwortcode 20X oder 30X ist. Bei Fehlerantworten fehlten die Kopfzeilen. Ich musste den Parameter
always
verwenden, um sicherzustellen, dass die Header unabhängig vom Antwortcode hinzugefügt werden:add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;
Sobald das Backend korrekt konfiguriert war, konnte ich auf die tatsächliche Fehlermeldung im Angular-Code zugreifen.
Bei mir wurde es durch eine serverseitige JsonSerializerException verursacht.
Der Client sagte:
Die Vereinfachung des Antworttyps durch Beseitigung der Schleifen löste das Problem.
Wenn Sie Laravel als Backend verwenden, dann bearbeiten Sie Ihre .htaccess-Datei, indem Sie einfach diesen Code einfügen, um das Problem CROS in Ihrem Angular- oder IONIC-Projekt zu lösen