这是我在httpService.ts
中的代码public HttpPost(url: string, data: any): Observable<Response>
{
let headers = new Headers();
let reqOpts = new RequestOptions();
headers.append(AUTH_CONTENT_TYPE_KEY, AUTH_CONTENT_TYPE);
if (this.Token) {
headers.append(AUTH_HEADER_KEY, AUTH_TOKEN_PREFIX + this.Token);
}
reqOpts.headers = headers;
return this.http.post(url, data, reqOpts).timeout(30000).map((res: Response) => res)
.catch((err: Response) => { return Observable.throw(err) });
}
如果我尝试使用此服务以这种方式调用API:
this.httpService.HttpPost(url, data).subscribe(
(res: any) =>
{
// do something
},
(error: any) =>
{
if (error.status === 409)
// do something
else if (error.status === 401)
// do something
else
// do something
}
);
如果res状态代码不是200,例如401,403或409,则控制台中的zone.js会生成这些恼人的错误。 (抱歉隐藏API的部分网址)
所以无论如何都要阻止zone.js在控制台中产生这样一种烦人的错误,试图谷歌寻找一个带有示例但尚未找到的解决方案,谢谢!
试图在main.ts中使用它,但没有奏效:
window.console.error = function() {};
编辑:添加堆栈跟踪:
答案 0 :(得分:3)
当网络请求失败时,Chrome会在控制台中显示错误。该错误显示失败的URL,收到的HTTP状态以及请求的来源。通常,在Angular中,您会响应用户的某些操作而发出HTTP请求。 Angular使用区域捕获这些操作,因此,几乎所有错误都来自zone.js
。但是,如果检查整个堆栈跟踪,则会在调用自己的代码后发现错误。只是zone.js
中的代码最终会调用该代码。
因此,不在控制台中查看请求错误的唯一方法是将chrome控制台配置为忽略它们,但我不认为有一种编程方式。
我确定您正在考虑window.onerror
,这在理论上可以捕获任何未捕获的异常。但是这些网络错误不是JavaScript异常,因此您无法捕获它们。
我不会替换console.error
。因为如果你这样做,你将无法在代码中看到真正的错误。无论如何,如上所述,在这种情况下,Chrome正在写入控制台,隐藏这些错误的唯一方法是,正如我已经说过的那样,过滤它们(但它当然只适合你)。
答案 1 :(得分:3)
在开发模式下,您可以在src/environments/environment.ts
import `zone.js/dist/zone-error`;
然后大多数与区域相关的错误堆栈跟踪都将消失。