2016-02-27 42 views
12

ho il seguente codice nel mio servizioGet messaggio di errore da 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')) 

    } 

Nel mio file componente,

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

Voglio stampare il messaggio di errore in caso di per es. URL Invailid. Quando stampo l'errore, ottengo un oggetto (probabilmente oggetto di risposta) come la seguente:

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

Se apro questo, non riesco a trovare il messaggio di errore. C'è un modo migliore per ottenere messaggi di errore precies?

risposta

9

L'errore è contenuto nel corpo della risposta anche in questo caso. Vedere la funzione di errore gestore di eventi onError:

è possibile accedervi utilizzando il metodo JSON sulla risposta:

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

Modifica

ho studiato un un po 'più questo problema. In effetti, non puoi avere il messaggio esatto. Intendo lo net::ERR_NAME_NOT_RESOLVED. XHR non lo fornisce. Detto questo, puoi vedere che lo status di XHR è 0. Questo potrebbe essere un suggerimento che c'era un problema nella richiesta quando si inviava la richiesta (in realtà non è stata inviata).

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

Vai a questa domanda:

+0

Grazie per la risposta. Posso accedervi. Ma per es. quando ho un url non valido, non riesco a vedere il messaggio di errore nel corpo della risposta. È possibile ottenere un messaggio di errore da mostrare sull'interfaccia utente? – user3288346

+0

Prego! In effetti, non puoi avere il messaggio esatto poiché non è accessibile all'interno dell'oggetto XHR. Detto questo, puoi fare affidamento sul campo 'status' di questo oggetto ... Ho aggiornato la mia risposta. –