2017-08-08 3 views
2

ich die neue bin mit (4.3) Httpclient in Winkeldaten zu meinem Back-End-Server POST:Angular 2 Httpclient Fehlerkörper

this.httpClient.post<View>(`/path`, data).subscribe(
    (view: View) => console.log("Success"), 
    (error: HttpErrorResponse) => { 
     console.log(error) 
     this.errorMessage = <any>error.error; 
    }); 
); 

Dieser Aufruf einer (erwarteten) Fehler erzeugt (409), aber aus irgendeinem Aus diesem Grund enthält der protokollierte Fehler nicht den vom Server gesendeten Fehler. Ich kann den Statuscode sehen, aber das Feld error.error, das den Antworttext enthalten sollte, fehlt. Hat jemand irgendwelche Ideen, was könnte falsch sein?

Ich habe den Back-End-Anruf mit curl getestet und kann den Antworttext vom Server sehen.

Antwort

0

Dies ist ein bekannter Fehler in Winkeln, die eine Ausnahme während des json Parsing werfen und nicht den Fehler bevöl Feld:

https://github.com/angular/angular/pull/18466

+0

Also in der Zwischenzeit gibt es keine benutzerfreundlichen Nachrichten ??? – naoru

+0

Nicht, wenn die Antwort Ihres Servers nicht-json ist ... –

+0

Ich habe mit einem Interceptor daran gearbeitet. –

0

Ist Ihr Fehlertext als JSON oder unformatierter Text/other zurück? Ich hatte ein ähnliches Problem, bis ich erkannte, dass der Körper mit dem Fehler Ergebnis zurückgegeben wurde, war eine einfache Zeichenfolge. Ich hatte den Anruf zu etwas ähnlichem, dies zu ändern (verzeihen Sie das Fehlen von Typsicherheit hier):

this.http.post('http://address', body, { responseType: 'text' }) 
     .subscribe(data => { 
      this.result = data['value']; 
      this.router.navigate(['/route']); 
     }, (error: HttpErrorResponse) => { 
      this.error = error.error; 
      this.router.navigate(['/error']); 
     }); 
+0

Verwendet dies den neuen HttpClient? Wenn ich diese Syntax verwende, bekomme ich den Fehler: 'TS2345: Argument des Typs '{responseType:" text "; } 'kann nicht dem Parameter vom Typ' {headers ?: HttpHeaders; beobachten ?: "Körper"; params ?: HttpParams; reportProgress ?: boolean; respons ... '. ' –

+0

@DanielScott Siehe https://angular.io/guide/http#request-non-json-data {responseType:' text '} geht zum body-Parameter, gleich nach der URL. – user1740331