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

Файловая маршрутизация 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:

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.