Zenn
0️⃣

ステータスコード0をどう扱うか

に公開

この記事を書いた背景

Sentryでエラーが着信していたので、Breadcrumbsを見ていたところ、エラーが吐かれる直前の非同期通信のステータスコードが[0]となっていました。
これはどんなエラーなのか?Sentryに通知すべきなのか?を調べました。

どんなエラーなのか(公式)

Before the request completes, the value of status is 0. Browsers also report a status of 0 in case of XMLHttpRequest errors.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status

訳すと「リクエストが完了する前は、statusの値は0になります。ブラウザは、XMLHttpRequestのエラーが発生した場合も、ステータスコードを0と報告します。」となります。

実際にこのユーザーの操作ログをみてわかったこと

  • 同時にいくつかのリクエストを送っていて、ステータスコードが[0]になったのは最後にリクエストされたもの。(=それ以降のリクエストがない)つまり、画面遷移かなにかの直前にリクエストしたもののステータスコードが0になっている
  • サーバーのレスポンスのログを見ると、ステータスコードは200が返っている

どう処理するか

サーバーでは200で処理できている、ユーザーがそれ以上サービスを閲覧していないことから、Sentryに通知は不要と判断しました。

扱っているサービスでは、非同期通信にaxiosを使っていました。
ステータスコードが0が発生するのは、responseが無いときなので、その場合に、特定のエラー文を発生させて、その文章を ignoreErrors に登録することで対応しました。

  request?: any;
  response?: AxiosResponse<T, D>;

https://github.com/axios/axios/blob/1317261125e9c419fe9f126867f64d28f9c1efda/index.d.ts#L413-L414

Discussion

ログインするとコメントできます