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 + Laravel8.4でAxiosのエラーハンドリングしてみる

Last updated at Posted at 2021-06-11

##【開発環境】
Windows 10 HOME
PHP 7.4.7
MySQL

Laravel Framework 8.4
vue : 2.6.12
vue-router : 3.5.1
vee-validate : 3.4.9
vue-axios-interceptors : 0.3.2

##【目次】

  項目     
- はじめに
- 前提条件
- 使い方
- 最後に
- 参考

#はじめに

Vue.js + Laravel8.4でAxios(Ajax)のエラーハンドリングしてみました。

Vue.js + Laravelの勉強をしており、
下記の記事を見て動かしてみましたが
CRUDの最小構成のシステムで
もっと機能を追加したという事で、今回の記事にしたという経緯です。
(2021年6月11日現在)

Vue.js + LaravelでシンプルなSPA構築チュートリアル:概要編

Vue.jsとLaravelによるSPA記事で下記の記事で構成しています。
(未リンクの記事はこれから作成予定)

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

Vue.js + Laravel8.4でVeeValidateを使ってバリデーションしてみる

Vue.js + Laravel8.4でAxiosのエラーハンドリングしてみる
↑↑↑↑↑↑今回はここです↑↑↑↑↑↑

[Vue.js + Laravel8.4でLaravel側もバリデーションしてみる]
[Vue.js + Laravel8.4でLaravel側のAPIの認証処理してみる]
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

Github
でもソースを公開していますので参考にして下さい。

#前提条件

参考にさせて頂いた記事との開発環境の相違箇所。

・Laravel のバージョンが異なる

Laravel 6.*

App\Task;

Laravel 8.4

App\Models\Task;

上記のようにLaravel 8.*ではコントローラーのパスが
変更されていますので適宜変更して下さい。

・入力項目のCSSを若干変更しています。
・DBはMySQLを使用

#使い方

<script> 部分の修正。

resources/js/components/TaskCreateComponent.vue
<script>
・・・

getTasks() {
axios.get('/api/tasks')
.then((res) => {
    this.tasks = res.data;
})

// ほとんどのエラーをキャッチ
Vue.config.errorHandler = function (err, vm, info) {
    // 2.2.0 以降で使用可
    alert(err);
}
// 残りのエラーをキャッチ
window.addEventListener("error", event => {
    alert(event.error);
});
window.addEventListener("unhandledrejection", event => {
    alert(event.reason);
});
・・・
</script>

Vue.config.errorHandler

Vuejs内のエラーを一元的に処理したい場合に有効
例えば、全ての画面でのどんなエラーでも収集したい場合

addEventListener
JavaScriptからさまざまなイベント処理を実行することができるメソッド。

例として、こんな感じです。

Webページが読み込まれたかどうか?
マウスによるクリックがされたかどうか?
フォームに何らかの操作が行われたかどうか?
キーボードから入力が行われたかどうか?

別の処理方法もある

そして上記のやり方とは別に
下記は古い?処理方法のやり方っぽいです。

resources/js/components/TaskCreateComponent.vue
.catch(function (error){
    if(error.reponse){
        console.log(error.reponse.data);
        console.log(error.reponse.status);
        console.log(error.reponse.header);
    } else if (error.request) {
        // 要求がなされたが、応答が受信されなかった
        console.log(error.request);
    } else  {
        // トリガーしたリクエストの設定に何かしらのエラーがある
        console.log('Error', error.message);
    }
    console.log(error.config);
});

更に余裕があれば vue-axios-interceptors を使ってみる。
(対象 : Laravel 5.5以上)

vue-axios-interceptors

ますはターミナルでインストール。

npm install vue-axios-interceptors --save

そして下記の2ファイルを修正。

resources\js\app.js
/* vue-axios-interceptors */
require('vue-axios-interceptors');
window.axios = require('axios');
resources\js\components\TaskListComponent.vue
/* axios.interceptors */
mounted() {
    window.intercepted.$on('response', data => {
        console.log(data); // { status: 404, code: 'Not found', body: null }
    });
    this.getTasks();
}

vue-axios-interceptorsを使うことによって
例えばgoogle chrome developer toolsでF12で起動し
Consoleのタブでレスポンスの内容を赤枠部分に表示出来ます。

Laravel - Google Chrome 2021-06-11 13.53.44.png

commit:Axios エラーハンドリング

#最後に

Vue.jsは勉強して日が浅く、
間違い等があるかもしれません。

修正点等ありましたらコメント下さい。

#参考

【Ajax】axiosを使って簡単にHTTP通信

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?