Nuxt.jsでaxiosから$fetchやuseFetchに変えたときにcatchの中に入ってくれない【備忘録】

Nuxt2からNuxt3へバージョンアップを行った際に、今までaxiosを使って行っていたAPIの処理を$fetchやuseFetchを使って行うようにしました。
すると下記のようにtry catchでくくったのに、エラーが起きたときにcatchの中に入ってくれないという事象が起きました。

今回はその原因はなんなのかについてご紹介していきます。

検索にも引っかからず、ややまとまりがないため個人の備忘録に近いです。

Nuxt.jsのバージョンは3.11.2となります。



Nuxt.jsでaxiosから$fetchやuseFetchに変えたときにcatchの中に入ってくれない【備忘録】

結論を言うと、例えばAPIを叩いて401エラーが発生している際に、$fetchやuseFetchがエラーをH3Errorオブジェクトで返すのではなく、結果のerrorプロパティに含めて返すため、catchの中に入りません。
そのため、try-catchではなく、useFetchのエラーハンドリング方法に変更する必要があります。

あるいは、
import { H3Error } from 'h3'
でH3Errorをインポートして、onRequestなどのときに

などで明示的にh3Errorをスローすると良いでしょう。

終わりに

Nuxt2からNuxt3へバージョンアップを行った際に、今までaxiosを使って行っていたAPIの処理を$fetchやuseFetchを使って行うようにした際に、エラーが起きたときにcatchの中に入ってくれないという事象が起きたときの原因と対処法についてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Nuxt.js

Posted by ちこ