透過 100 多個提示學習 Nuxt!

defineNuxtRouteMiddleware

使用 defineNuxtRouteMiddleware 輔助函式建立具名的路由中介層。

路由中介層儲存在 Nuxt 應用程式的 middleware/ 中(除非另行設定)。

類型

defineNuxtRouteMiddleware(middleware: RouteMiddleware) => RouteMiddleware

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

參數

middleware

  • 類型: RouteMiddleware

一個函式,它接收兩個 Vue Router 的路由位置物件作為參數:下一個路由 to 作為第一個,目前的路由 from 作為第二個。

Vue Router 文件中深入了解 RouteLocationNormalized 的可用屬性。

範例

顯示錯誤頁面

您可以使用路由中介層來拋出錯誤並顯示有用的錯誤訊息

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 中使用它們。