Angular 4省略HTTP错误代码

时间:2017-10-08 01:38:54

标签: angular angular-httpclient

我有这样的api电话:

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

Chrome上的错误显示502 (Bad Gateway),但Angular返回的错误显示status = 0,我想在发生此错误时向用户显示消息,但我怎样才能正确捕获http错误?

enter image description here

2 个答案:

答案 0 :(得分:0)

我通常不会在服务中订阅,而是在组件中订阅。但这是我在auth服务中的代码。

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

让我知道我是否可以成为你的助手。

答案 1 :(得分:-1)

首先,HTTP状态代码0是not really a thing。它只表示没有收到服务器的响应,无论出于何种原因。

其次,HTTP 502 Bad Gateway表示您调用的服务收到来自上游服务器的无效响应

第三,在您的具体情况下,我看到了Access-Control-Origin问题。 This answer详细介绍了如何解决它。