Nuxt 3 已于 31 July 2026 结束生命周期
此版本将不再接收错误修复或安全补丁。 升级到 Nuxt 4 或获取 HeroDevs 提供的延长支持

路由

Nuxt 文件系统路由为 pages/ 目录中的每个文件创建对应的路由。

Geprüfte Übersetzung ·0 % geprüft

Nuxt 的一项核心功能是文件系统路由。pages/ 目录中的每个 Vue 文件都会创建对应的 URL(或路由),用于显示该文件的内容。Nuxt 会为每个页面使用动态导入,通过代码拆分,只为请求的路由发送最少量的 JavaScript 代码。

页面

Nuxt 路由基于 vue-router,并根据文件名从 pages/ 目录中创建的每个组件生成路由。

此文件系统路由使用命名约定来创建动态和嵌套路由:

-| pages/
---| about.vue
---| index.vue
---| posts/
-----| [id].vue
Weitere Informationen findest du unter Docs > Directory Structure > Pages.

导航

<NuxtLink> 组件用于在页面之间建立链接。它会渲染一个 <a> 标签,并将 href 属性设置为页面的路由。应用完成水合后,页面跳转会通过 JavaScript 更新浏览器 URL 来实现。这样可以避免整页刷新,并支持带动画的页面过渡。

当 <NuxtLink> 在客户端进入视口时,Nuxt 会自动提前预取所链接页面的组件和负载(生成的页面),从而加快导航速度。

pages/index.vue
<template>
  <header>
    <nav>
      <ul>
        <li><NuxtLink to="/about">关于</NuxtLink></li>
        <li><NuxtLink to="/posts/1">文章 1</NuxtLink></li>
        <li><NuxtLink to="/posts/2">文章 2</NuxtLink></li>
      </ul>
    </nav>
  </header>
</template>
Weitere Informationen findest du unter Docs > API > Components > Nuxt Link.

路由参数

useRoute() 组合式函数可在 Vue 组件的 <script setup> 代码块或 setup() 方法中使用,以访问当前路由的详细信息。

<script setup lang="ts">
const route = useRoute()

// 访问 /posts/1 时,route.params.id 的值为 1
console.log(route.params.id)
</script>
Weitere Informationen findest du unter Docs > API > Composables > Use Route.

路由中间件

Nuxt 提供了一个可自定义的路由中间件框架,可在应用中随处使用,非常适合提取需要在导航到特定路由前执行的代码。

路由中间件运行在 Nuxt 应用的 Vue 部分。虽然名字相似,但它们与运行于应用 Nitro 服务器部分的服务器中间件完全不同。
路由中间件不会针对服务器路由(例如 /api/*)或其他服务器请求运行。若要对这些请求应用中间件,请改用服务器中间件。

路由中间件分为三类:

  1. 匿名(或内联)路由中间件,直接定义在使用它们的页面中。
  2. 命名路由中间件,放置在 middleware/ 目录中,并会在页面使用时通过异步导入自动加载。(注意:路由中间件名称会规范化为 kebab-case,因此 someMiddleware 会变为 some-middleware。)
  3. 全局路由中间件,放置在 middleware/ 目录中(带有 .global 后缀),并会在每次路由变化时自动运行。

下面是 auth 中间件保护 /dashboard 页面示例:

function isAuthenticated (): boolean { return false }
// ---cut---
export default defineNuxtRouteMiddleware((to, from) => {
  // isAuthenticated() 是一个示例方法,用于验证用户是否已认证
  if (isAuthenticated() === false) {
    return navigateTo('/login')
  }
})
Weitere Informationen findest du unter Docs > Directory Structure > Middleware.

路由校验

Nuxt 支持通过你想要校验的每个页面中的 definePageMeta() 的 validate 属性来校验路由。

validate 属性接受当前路由作为参数。你可以返回布尔值以判断该路由是否为此页面的有效路由。如果返回 false,将触发 404 错误。你也可以直接返回包含 status/statusText 的对象来自定义错误响应。

如果你的需求更复杂,可以改为使用匿名路由中间件。

<script setup lang="ts">
definePageMeta({
  validate (route) {
    // 校验 id 是否由数字组成
    return typeof route.params.id === 'string' && /^\d+$/.test(route.params.id)
  },
})
</script>
Weitere Informationen findest du unter Docs > API > Utils > Define Page Meta.