2016-02-27 13 views
12

Mam następujący kod w mojej służbiedostaję komunikat o błędzie z Kątowymi 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')) 

    } 

W moim pliku komponentu,

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

Chcę wydrukować komunikat o błędzie w przypadku np. Brak adresu URL. Kiedy drukować błąd, mam obiekt (prawdopodobnie obiekt odpowiedzi) jak następuje:

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

Jeśli otworzę to, że nie może znaleźć komunikat o błędzie. Czy istnieje lepszy sposób na uzyskanie komunikatów o błędach precies?

Odpowiedz

9

Błąd jest zawarty w treści odpowiedzi nawet w tym przypadku. Zobacz obsługi zdarzenia błędu onError funkcję:

masz do niego dostęp za pomocą metody json na odpowiedź:

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

Edytuj

badałem trochę więcej w tym wydaniu. W rzeczywistości nie możesz mieć dokładnej wiadomości. Mam na myśli net::ERR_NAME_NOT_RESOLVED. XHR tego nie zapewnia. Mimo to widać, że status XHR to 0. Może to być wskazówka, że ​​wystąpił problem podczas wysyłania zapytania (w rzeczywistości nie jest wysyłany).

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

Zobacz na to pytanie:

+0

Dzięki za odpowiedź. Mogę to uzyskać. Ale dla np. gdy mam nieprawidłowy adres URL, nie widzę komunikatu o błędzie w treści odpowiedzi. Czy można uzyskać komunikat o błędzie, aby wyświetlić w interfejsie użytkownika? – user3288346

+0

Nie ma za co! W rzeczywistości nie można mieć dokładnej wiadomości, ponieważ nie jest dostępna w obiekcie XHR. Powiedziawszy, możesz polegać na polu 'status' tego obiektu ... Zaktualizowałem swoją odpowiedź. –

Powiązane problemy