2016-02-27 16 views
12

Ich habe den folgenden Code in meinem DienstErhalten Fehlermeldung von Angular 2 http

myService.ts

makeHttpGetRequest(url){ 

     return Observable.interval(config.SUPERVISOR_REFRESH_INTERVAL * 1000) 
      .switchMap(() => this.http.get(url)) 
      .map(res => res.json()) 
      .timeout(config.REQUEST_TIMEOUT * 1000, new Error('Time out occurred')) 

    } 

In meiner Komponentendatei,

myComponent.ts

ngOnInit(){ 
     this._myService.makeHttpGetRequest(myurl) 
      .subscribe(
       data => { 
        this.supervisorServers = data; 
        } 

       }, 
       error => { 
        this.error = true; 
        console.log(error); //gives an object at this point 
        this.showError(error); 
       } 
      ); 
    } 

Ich möchte die Fehlermeldung im Fall von z.B. Invalid URL Wenn ich den Fehler drucken, erhalte ich ein Objekt (wahrscheinlich Antwortobjekt) wie folgt aus:

Object { _body: error, status: 200, statusText: "Ok", headers: Object, type: 3, url: null } 

Wenn ich diese öffnen, ich kann nicht die Fehlermeldung finden. Gibt es eine bessere Möglichkeit Precies-Fehlermeldungen zu erhalten?

Antwort

9

Der Fehler ist auch in diesem Fall im Körper der Antwort enthalten. Siehe die Fehlerereignishandler onError Funktion:

Sie können es Zugriff auf die json Methode auf die Antwort mit:

error => { 
    this.error = true; 
    console.log(error.json()); //gives the object object 
    this.showError(error.json()); 
} 

bearbeiten

ich untersucht etwas mehr dieses Problem. In der Tat können Sie nicht die genaue Nachricht haben. Ich meine die net::ERR_NAME_NOT_RESOLVED. XHR bietet es nicht an. Das heißt, Sie können sehen, dass die status von XHR 0 ist. Dies könnte ein Hinweis darauf sein, dass beim Senden der Anfrage ein Problem aufgetreten ist (es wird nicht gesendet).

error => { 
    (...) 
    var err = error.json(); 
    var status = err.currentTarget.status; 
    (...) 
} 

Sehen Sie diese Frage:

+0

Danke für die Antwort. Ich kann darauf zugreifen. Aber für z.B. Wenn ich eine ungültige URL habe, kann ich keine Fehlermeldung im Hauptteil der Antwort sehen. Ist es möglich, eine Fehlermeldung zu erhalten, die auf der Benutzeroberfläche angezeigt wird? – user3288346

+0

Gern geschehen! In der Tat können Sie nicht die genaue Nachricht haben, da sie nicht innerhalb des XHR-Objekts zugänglich ist. Das heißt, Sie können sich auf das 'Status'-Feld dieses Objekts verlassen ... Ich habe meine Antwort aktualisiert. –