Laravel + Vue.js エラーレスポンスを受けとった際にページを切り替える
前提
エラーレスポンスを受けとった際に、そのステータスコードに応じたエラーページを表示させることができるような仕組みを実装していきます。
環境
PHP | Laravel | Vue.js |
---|---|---|
7.4.5 | 7.28.4 | 2.6.11 |
全体的な処理の流れ
レスポンスを受けとったあと
正常レスポンスであった場合
レスポンスが期待通りであった場合は、通常通りその後の処理に進みます。
storeにあるデータを保管したり、dataオプションにデータを格納したり、$routerでコンポーネントを切り替えたりします。
エラーレスポンスであった場合
前提
以下のコードを参考に説明していきます。
グループ作成処理を行うAPIです。
補足
別のファイルでexport const CREATED = 201
と定義して、それをインポートしています。
methods: {
//グループ作成処理
async submit() {
const response = await axios.post('グループ作成処理APIルーティング')
if( response.status !== CREATED) {
this.$store.commit('error/setCode', response.status)
}
this.$router.push('遷移先のルーティング')
}
}
レスポンスのステータスコードをerrorsストアに保存
エラーレスポンスが返ってきた場合は、まずerrosストア(ステータスコードを保管しておくためのストア)のステートにレスポンスに含まれるステータスコードを保存します。
errorsストアにコミットしてミューテーションを呼ぶ(上のコード参照)
if( response.status !== CREATED) {
this.$store.commit('error/setCode', response.status)
}
errorsストアでステータスコードをステートにセットする
const state = {
code: null
}
const mutations = {
setCode(state, code) {
state.code = code
}
}
export default {
namespaced: true,
state,
mutations,
}
App.vue(ルートコンポーネント)がerrosストアを監視 => ページの切り替え
App.vue
computed: {
errorCode () {
return this.$store.state.error.code
}
},
watch: {
errorCode: {
handler (val) {
//認証エラー
if (val === UNAUTHORIZED) {
this.$router.push('/refresh-token')
this.$store.commit('auth/setUser', null)
this.$router.push('/401')
}
//権限エラー
else if (val === FORBIDDEN ) {
this.$router.push('/403')
}
//トークンエラー
else if (val === TOKEN_ERROR) {
this.$router.push('/refresh-token')
this.$store.commit('auth/setUser', null)
this.$router.push('/419')
}
//システムエラー
else if (val === INTERNAL_SERVER_ERROR) {
this.$router.push('/500')
}
//存在しないページのエラー
else {
this.$router.push('/not-found')
}
},
immediate: true
},
$route () {
this.$store.commit('error/setCode', null)
}
}
算出プロパティ(computed)を用いて、errorsストアのステートの値(デフォルトはnull)を算出してもらいます。
その算出プロパティを監視し、算出結果に変更が見られたとき、watchオプションの中の処理が実行されます。
その算出結果(ステータスコード)に応じて条件分岐をし、そのステータスコードに応じたページに切り替えます。
ページが切り替わったあとは、errorsストアのステートをnullに戻しておきます。
以上でエラーレスポンスを受け取った際に、そのステータスコードに応じてページを切り替えることができました!
最後に
ここまで読んでいただきありがとうございました。
誰かの参考に少しでもなれば幸いです。
何かミスや理解不足の部分がありましたら、気軽にコメントください。
Author And Source
この問題について(Laravel + Vue.js エラーレスポンスを受けとった際にページを切り替える), 我々は、より多くの情報をここで見つけました https://qiita.com/kodokunadancer/items/942807a9ddf6a78eecdc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .