ここに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の部分URLを非表示にして申し訳ありません)
とにかく、zone.jsを停止して、コンソールでそのような種類の迷惑なエラーを生成し、例を使用してグーグルで解決策を試しましたが、まだ見つかりませんでした。ありがとう!
これをmain.tsで使用しようとしましたが、うまくいきませんでした:
window.console.error = function() {};
編集:スタックトレースを追加:
ネットワークリクエストが失敗すると、Chromeはコンソールにエラーを表示します。エラーには、失敗したURL、受信したHTTPステータス、リクエストのオリジンが表示されます。通常、Angularでは、ユーザーからの何らかのアクションに応答してHTTPリクエストを作成します。Angularは、ゾーンを使用してそれらのアクションをキャプチャするため、ほとんどすべてのエラーはzone.js
で発生します。スタック全体を確認するとただし、トレースでは、独自のコードを呼び出した後にエラーが発生することがわかります。zone.js
内のコードが、そのコードを呼び出すだけです。
したがって、コンソールでリクエストエラーを表示しない唯一の方法は、chromeコンソールを無視してそれらを無視することですが、プログラムでそれを行う方法はないと思います。
window.onerror
について考えていると思いますが、これは理論的にはキャッチされていない例外をすべてキャプチャします。ただし、これらのネットワークエラーはJavaScriptの例外ではないため、キャプチャすることはできません。
console.error
は置き換えません。これを行うと、コードに含まれている可能性のある真のエラーを表示できなくなります。とにかく、前述のように、この場合はChromeコンソールに書き込んでいる人であり、これらのエラーを非表示にする唯一の方法は、すでに述べたように、それらをフィルタリングすることです(ただし、機能するのはもちろんあなたのために)。
開発モードでは、次の行を追加して、ゾーンエラーをsrc/environments/environment.ts
にインポートできます。
import `zone.js/dist/zone-error`;
次に、ゾーン関連のエラースタックトレースのほとんどがなくなります。