【Nuxt】条件に沿ったエラーページを作成する
TOC
今回はNuxt.jsでエラーページのカスタマイズを行ってみたいと思います。
エラーページの作成
まずはじめに、Nuxt.jsにはデフォルトでエラーページが用意されています。 ローカル開発環境を立ち上げ、適当なURLを入力し、表示を確認してみましょう。
現在表示されているのは404エラーページです。 今回はこのエラーページをカスタマイズしていきたいと思います。
エラーページのカスタマイズを行うには、まずルートディレクトリにlayouts
ディレクトリを作成し、その直下にerror.vue
を作成します。
<template>
<div style="padding: 100px">
<div>カスタムエラーページ</div>
</div>
</template>
なんとこれだけでカスタマイズは完了です。 先程404エラーページを確認したURLをもう一度入力し、表示を確認してみましょう。
error.vue
の内容が表示されているかと思います。
条件によってコンテンツを出し分ける
1つのエラーページだけで十分なプロダクトはそうそうないと思います。
ですので次は、エラーページを条件によって出し分けてみたいと思います。
まず、このlayouts/error.vue
にはerror
オブジェクトのpropsが渡されます。
error
オブジェクトの中にはstatusCode
とmessage
とpath
が含まれます。
export default {
props: {
error: {
type: Object,
default: () => ({
statusCode: null,
message: null,
path: null,
}),
},
},
}
props
を設定するということは、何かしらの方法で値を渡す必要があります。
Vueコンポーネントから扱える$nuxt
ヘルパーや、asyncData
・middleware
・nuxtServerInit
で扱うことができるcontext
から呼び出すことができる、error
メソッドで値を渡し、エラーページのハンドリングを行います。
その動きを確かめるためにまず、error.vue
にstatusCode
とmessage
とpath
を表示させるtemplateを作成します。
<template>
<div style="padding: 100px">
<div>カスタムエラーページ</div>
<div>{{ error.statusCode }}</div>
<div>{{ error.message }}</div>
<div>{{ error.path }}</div>
</div>
</template>
ではpages/index.vue
にasyncDate
を設定して、error
メソッドを呼び出してみましょう。
export default {
asyncData({ error }) {
error({
statusCode: 500,
message: '500エラーページに遷移します',
path: '/',
})
},
}
error
メソッドに渡した内容が画面に表示されていると思います。
今回は渡された内容をただ表示しただけですが、statusCode
やmessage
の値を参照してコンポーネントを切り替えたりすれば、条件に応じたエラーページを表示することができます。
まとめ
エラーページの対応というのはそう多く行うことはないと思いますが、プロダクトによっては細かく出し分けを行う事もあるかと思います。 Nuxt.jsでそういった対応を行う際は是非参考にしてみてください。