Nuxt Nation カンファレンスが開催されます。11月12〜13日にご参加ください。

defineNuxtRouteMiddleware

defineNuxtRouteMiddlewareヘルパー関数を使用して名前付きルートミドルウェアを作成します。

ルートミドルウェアは、Nuxtアプリケーションのmiddleware/ディレクトリに保存されます(特に設定されていない限り)。

defineNuxtRouteMiddleware(middleware: RouteMiddleware) => RouteMiddleware

interface RouteMiddleware {
  (to: RouteLocationNormalized, from: RouteLocationNormalized): ReturnType<NavigationGuard>
}

パラメータ

middleware

  • RouteMiddleware

2つのVue Routerのルートロケーションオブジェクトをパラメータとして受け取る関数。最初のパラメータは次のルートであるto、2番目のパラメータは現在のルートであるfromです。

RouteLocationNormalizedで使用可能なプロパティの詳細については、Vue Routerドキュメントをご覧ください。

エラーページの表示

ルートミドルウェアを使用してエラーをスローし、役立つエラーメッセージを表示できます

middleware/error.ts
export default defineNuxtRouteMiddleware((to) => {
  if (to.params.id === '1') {
    throw createError({ statusCode: 404, statusMessage: 'Page Not Found' })
  }
})

上記のルートミドルウェアは、ユーザーを~/error.vueファイルで定義されたカスタムエラーページにリダイレクトし、ミドルウェアから渡されたエラーメッセージとコードを公開します。

リダイレクト

ルートミドルウェア内でuseStatenavigateToヘルパー関数と組み合わせて使用して、認証ステータスに基づいてユーザーを異なるルートにリダイレクトします

middleware/auth.ts
export default defineNuxtRouteMiddleware((to, from) => {
  const auth = useState('auth')

  if (!auth.value.isAuthenticated) {
    return navigateTo('/login')
  }

  if (to.path !== '/dashboard') {
    return navigateTo('/dashboard')
  }
})

navigateToabortNavigationはどちらもグローバルに利用可能なヘルパー関数であり、defineNuxtRouteMiddleware内で使用できます。