如何在Angular2中处理net :: ERR_CONNECTION_REFUSED

时间:2016-12-28 02:25:14

标签: angular

error-handling显示如何处理错误,如下所示:

private handleError (error: Response | any) {
  // In a real world app, we might use a remote logging infrastructure
  let errMsg: string;
  if (error instanceof Response) {
    const body = error.json() || '';
    const err = body.error || JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
  } else {
    errMsg = error.message ? error.message : error.toString();
  }
  console.error(errMsg);
  return Promise.reject(errMsg);
}

我想访问API服务器,但服务器尚未启动。然后我收到了错误:

http://localhost:3000/api/heroes net::ERR_CONNECTION_REFUSED

我需要礼貌地告诉用户API服务器还没有启动。我该如何处理错误?

错误响应是:

_body:ProgressEvent
headers:Headers
ok:false
status:0
statusText:""
type:3
url:null

我可以根据回复的状态来处理吗?

4 个答案:

答案 0 :(得分:6)

//First inject the router in the constructor


private handleError (error: Response | any) {
//Your other codes    

if (error.status == 0){ //or whatever condition you like to put
this.router.navigate(['/error']);
}
}

答案 1 :(得分:0)

不可能区分ERR_CONNECTION_TIMED_OUT(上面提到的那个)和ERR_CONNECTION_REFUSED,因为HttpErrorResponse类不能区分它们。因此,您必须使用状态0来处理所有一般错误。根据HTTP状态代码列表https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

如果收到的响应不在此列表中,则为 非标准响应,可能是针对服务器软件定制的。

这意味着0是非标准响应。

Angular是一个Javascript框架;因此,您应该参考XMLHttpRequest状态代码以找出0的含义。 Mozilla页面上说。.

在请求完成之前,状态值为0。浏览器也 如果出现XMLHttpRequest错误,则报告状态为0。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status

因此,ERR_CONNECTION_REFUSED表示未建立连接(请求未完成),因此状态代码为0。在这种情况下,可以安全地说“无法连接到服务器”。 throwError是一个RxJs函数,它会发出错误消息,您可以通过Subscribe()方法读取该消息。

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((errorResponse: HttpErrorResponse) => {
       if (errorObj instanceof HttpErrorResponse) {
        if (errorObj.status === 0) {
          return throwError('Unable to Connect to the Server');
        }
       }
      })
    );
  }

答案 2 :(得分:-1)

即使我也遇到了类似的错误,而且原因很蹩脚。 如果您使用的是 angular 和 spring boot,则此类错误的可能原因可能是 spring 应用程序未运行。 两台服务器都必须开启。

答案 3 :(得分:-2)

当您尝试访问不安全的https网站时会发生这种情况。

解决方案是:首先使用浏览器连接到不安全的站点,将显示警告页面。点击&#34;提前参数&#34;并接受此网站是安全的。其次,您可以使用Angular代码到达此目的地。

希望这有帮助。