Маршрутизация

Файловая маршрутизация Nuxt создаёт маршрут для каждого файла в директории pages/.

Одна из ключевых возможностей Nuxt — файловый роутер. Каждый Vue-файл в app/pages/ создаёт соответствующий URL (маршрут), по которому отображается содержимое файла. Nuxt использует динамические импорты и code-splitting, чтобы отдавать минимум JavaScript для запрошенного маршрута.

Страницы

Маршрутизация Nuxt построена на vue-router; маршруты генерируются из компонентов в директории app/pages/ по именам файлов.

Используются соглашения об именовании для динамических и вложенных маршрутов:

-| pages/
---| about.vue
---| index.vue
---| posts/
-----| [id].vue
Узнать больше Docs > 4 X > Directory Structure > App > Pages.

Навигация

Компонент <NuxtLink> связывает страницы между собой. Он рендерит тег <a> с href, равным маршруту страницы. После гидрации приложения переходы выполняются на JavaScript при изменении URL, без полной перезагрузки страницы и с возможностью анимаций.

Когда <NuxtLink> попадает в зону видимости на клиенте, Nuxt заранее подгружает компоненты и payload связанных страниц — навигация становится быстрее.

app/pages/index.vue
<template>
  <header>
    <nav>
      <ul>
        <li><NuxtLink to="/about">About</NuxtLink></li>
        <li><NuxtLink to="/posts/1">Post 1</NuxtLink></li>
        <li><NuxtLink to="/posts/2">Post 2</NuxtLink></li>
      </ul>
    </nav>
  </header>
</template>
Узнать больше Docs > 4 X > API > Components > Nuxt Link.

Параметры маршрута

Композабл useRoute() даёт доступ к текущему маршруту в блоке <script setup> или в методе setup() компонента Vue.

pages/posts/[id].vue
<script setup lang="ts">
const route = useRoute()

// При переходе на /posts/1 значение route.params.id будет 1
console.log(route.params.id)
</script>
Узнать больше Docs > 4 X > API > Composables > Use Route.

Middleware маршрутов

Nuxt предоставляет настраиваемый middleware для маршрутов — код, который выполняется перед переходом на заданный маршрут.

Middleware маршрутов выполняется во Vue-части приложения Nuxt. Не путайте с server middleware, который работает в Nitro-серверной части.
Middleware маршрутов не выполняется для серверных маршрутов (например /api/*) и других серверных запросов. Для них используйте server middleware.

Есть три вида middleware маршрутов:

  1. Анонимный (inline) — определяется прямо на странице.
  2. Именованный — файлы в app/middleware/, подгружаются асинхронно при использовании на странице. (Имя нормализуется в kebab-case: someMiddlewaresome-middleware.)
  3. Глобальный — файлы в app/middleware/ с суффиксом .global, выполняются при каждом переходе.

Пример middleware auth для защиты страницы /dashboard:

function isAuthenticated (): boolean { return false }
// ---cut---
export default defineNuxtRouteMiddleware((to, from) => {
  // isAuthenticated() — пример проверки аутентификации
  if (isAuthenticated() === false) {
    return navigateTo('/login')
  }
})
Узнать больше Docs > 4 X > Directory Structure > App > Middleware.

Валидация маршрута

Валидация маршрута задаётся свойством validate в definePageMeta() на нужной странице.

validate получает route. Верните true/false, чтобы разрешить или запретить рендер этой страницы для маршрута. При false будет 404. Можно вернуть объект с status/statusText для кастомной ошибки.

Для сложной логики используйте анонимный middleware маршрута.

pages/posts/[id].vue
<script setup lang="ts">
definePageMeta({
  validate (route) {
    // Проверка: id состоит из цифр
    return typeof route.params.id === 'string' && /^\d+$/.test(route.params.id)
  },
})
</script>
Узнать больше Docs > 4 X > API > Utils > Define Page Meta.