0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Vue.js】エラーコードをcatch して条件分岐

Posted at

はじめに

APIを叩き、例外が発生した際にcatchでエラーコードを取得する方法についてです。

今回は、取得するエラーコードによって表示するエラーメッセージを変える必要があり、catchでのエラーコード確認方法が分からなかったため、備忘録として残しておきます。

実装のゴール

エラーコードにより表示するメッセージを切り替える

  • emailが重複している場合
    エラーコード: record_invalid
    メッセージ: このメールアドレスはすでに登録されています。別のメールアドレスをご利用下さい。

  • 既に同じユーザーが登録されている場合
    エラーコード: already_exist_error
    メッセージ: 既に登録されています。

前提

  • email重複時はバリデーションエラーが返る
  • 同じユーザーが存在している場合には、API側で任意の例外を発生させている
class
    class AlreadyExistError < BadRequestError; end
    
    def create
        # paramsの値を使いユーザーを検索する処理を記述
        
        # 同じユーザーがいる場合に例外を発生させる
        raise AlreadyExistError if user

上記のようにすることで任意のエラーを返すことができる。

catchでエラーを補足

try {
   # APIを叩く
} catch (e) {
   # ここでエラーコードを取得
}

上記のようにcatchの引数に(e)を記述することで、e の中にエラーが格納される。

エラーコードで条件分岐

エラーコードを確認するには以下のようにすればよい。

try {
   # APIを叩く
} catch (e) {
    if (e.response.data.code === 'record_invalid') {
        store.dispatch(
          'snackbar/setMessage',
          'このメールアドレスはすでに登録されています。別のメールアドレスをご利用下さい。'
        )
        store.dispatch('snackbar/openError')
     } else if (e.response.data.code === 'already_exist_staff_error') {
        store.dispatch(
        'snackbar/setMessage',
          '既に登録されています。'
        )
        store.dispatch('snackbar/openError')
    } else {
        store.dispatch('snackbar/setMessage', '登録できませんでした')
        store.dispatch('snackbar/openError')
    }
}

これでフロントでエラーコードを取得して条件分岐させることができます。
分かってみれば簡単ですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?