2017-10-08 67 views
0

我有一個API調用是這樣的:角4 ommiting HTTP錯誤代碼

 this.http.get(url) 
      .subscribe(results => { 
       ... 
      }, (err: any) => { 
       console.log('raw error =>', err); 
     }); 

在Chrome的錯誤顯示502 (Bad Gateway),但是從角顯示status = 0返回的錯誤,我想展現消息給用戶時這個錯誤發生,但我怎麼能正確地趕上http錯誤?

enter image description here

回答

0

首先,HTTP狀態碼0是not really a thing。它只是說沒有從服務器收到響應,無論出於何種原因。

其次,HTTP 502 Bad Gateway表示您稱爲的服務收到來自上游服務器的無效響應。

第三,在您的具體情況下,我看到一個Access-Control-Origin問題。 This answer進入如何解決它的細節。

+0

這顯然不是問題的答案,而僅僅是某人做錯事的答案。我有相同的情況和你的答案(標記爲已解決?)沒有幫助,對不起:( – ramden

0

我通常不會在服務訂閱,但在分量。但這是我在驗證服務中的代碼。

getUser(userId: string) { 
    const token = localStorage.getItem('token'); 
    const headers = new Headers({'Authorization': token}); 
    return this._http.get('http://localhost:3000/user/' + userId, {headers: headers})   
     .map(response => { 
      const data = response.json().obj; 
      let user = new User (data.email, data.password, 
           data.firstName, data.lastName, 
           data.messages); 
      return user; 
     }) 
     //.catch(error => Observable.throw(error.json())); 
     .catch((err) => this.handleError(err));  
} 
private handleError(error: Response) { 
    if(error.status == 403){ 
     console.error(error + 'Session over. Please log in to continue.'); 
    } 
    console.error(error + 'Session over. Please log in to continue.'); 
    this._router.navigate(['/']); 
    this.logout(); 

    return Observable.throw(error.json().error || "Server error"); 
} 

在我的組件,它應該是:

this.http.getUser(string: string) 
    .subscribe(
    result => { this.result = result;  
    }, 
    error => { console.log('raw error =>', err); 
}); 

讓我知道,如果我能更多的助手。

+0

你可以嘗試error.status == 0或error.status == 502 –

+0

像我的第一個評論(接受的解決方案) - 這不是正確的答案。 – ramden