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
我可以根据回复的状态来处理吗?
答案 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代码到达此目的地。
希望这有帮助。