予期しないことを期待する – Angular でのエラー処理のベスト プラクティス
HttpInterceptor
HttpInterceptor は Angular 4.3.1 で導入されたものです。 これは、HTTP リクエストとレスポンスをインターセプトして、それらを渡す前に変換または処理する方法を提供します。
インターセプターで実装できる使用例が 2 つあります。
最初に、エラーをスローする前に HTTP 呼び出しを一度または複数回再試行することができます。 たとえば、タイムアウトが発生した場合、例外をスローせずに続行できます。
このために、RxJS の retry 演算子を使用して observable に再サブスクライブするのです。
この種の動作のより高度な例:
- カスタム基準に基づいてエラー時に観測可能なシーケンスを再試行する
- Power of RxJS when using exponential backoff
次に、例外の状態をチェックして、それが 401 未承認エラーであるかを確認することができます。 トークン ベースのセキュリティでは、トークンのリフレッシュを試みることができます。 これがうまくいかない場合、ユーザーをログイン ページにリダイレクトできます。
ここでは、エラー状態をチェックしてエラーを再投入する前に、一度再試行しています。 セキュリティ トークンのリフレッシュはこの記事の範囲外です。
作成したインターセプターを提供する必要もあります。
Notifications
通知のために、Angular Material Snackbar を使用することにしました。
これで、エラー発生時にユーザーに対して簡単な通知を行います。
サーバ側とクライアント側のエラーは異なる方法で対応することができます。 通知の代わりに、エラー ページを表示できます。
エラー メッセージ
エラー メッセージは重要であり、したがって、ユーザーが先に進むのを助ける何らかの意味を持つ必要があります。 エラーが発生しました」と表示することで、ユーザーに何が問題なのか、どのように解決すればよいのかを伝えていません。
さらに良い解決策は、もっとお金を送金するように伝え、送金ページへのリンクを与えることです。
エラー処理が悪い UX の代わりではないことを忘れないでください。 ユーザーがエラーをスローする何かを行うことができるなら、それを修正しましょう!
素敵なエラー メッセージを作成したからといって、エラーをスルーしてはいけません。
ログ記録
エラーを記録しないと、エラーに遭遇したユーザーだけがそのことを知ることができます。 情報を保存することは、後で問題のトラブルシューティングを行うために必要です。
データを保存することを決定したら、それを保存する方法も選択する必要があります。 詳細は後述します。