2017-08-27 118 views
0

我想检测到服务器的连接错误,以便我可以向用户显示适当的消息。在Angular 2中检测服务器连接错误(404状态)

当后端服务器(Web API)关闭时,我试图通过使用http.get来访问此服务器上的方法我期望得到404状态或某种连接的响应错误。而是我越来越

“与状态响应:URL 0:空”

这是不明确的。 那么我该如何检测连接错误呢?

这是相关代码:

登录组件:

this.loginService.tryLogin(userName, password).subscribe(_loginStatus => { 
    //Some operations 
}, 
_err => this.errMsg = _err; // this.errMsg will be displayed to the user 
); 

登录服务

tryLogin(user: string, pwd: string): Observable<LoginStatus> { 
return this.http.get(this.serverUri + `Login/?username=${user}&password=${pwd}`) 
    .map(response => response.json()) 
    .catch(err => this.handleError(err)); 
} 

private handleError(error: any) { 
    const err = (error.json() ? error.json() : error); 
    console.log(err); 
    return Observable.throw(err); 
} 
+0

你检查吗? $ {pwd} –

+0

@PadmanabanGokula oops之后结束单引号缺失,现在修复它 – cookya

回答

1

可以使Http Interceptors这里使用。在Angular中使用新的拦截器很容易。

import { Observable } from 'rxjs'; 
import {Injectable} from '@angular/core'; 
import {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http'; 
import { HttpErrorResponse } from "@angular/common/http"; 

@Injectable() 
export class AngularInterceptor implements HttpInterceptor { 
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    return next.handle(req).do(event => {}, err => { 
     if(err instanceof HttpErrorResponse){ // here you can even check for err.status == 404 | 401 etc 
      console.log("Error Caught By Interceptor"); 
      //Observable.throw(err); // send data to service which will inform the component of the error and in turn the user 
     } 
    }); 
    } 
} 

注册此在的AppModule像

providers: [ 
     [ { provide: HTTP_INTERCEPTORS, useClass: 
       AngularInterceptor, multi: true } ] 
    ], 

有关HTTP客户端和拦截的详细信息检查此link