0

我有一个这样的 api 调用:

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

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

在此处输入图像描述

4

2 回答 2

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

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

于 2017-10-08T01:51:34.563 回答
-1

首先,HTTP 状态码 0并不是真正的东西。它只是说无论出于何种原因,都没有收到来自服务器的响应。

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

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

于 2017-10-08T06:19:02.410 回答