Файловая маршрутизация в JavaScript — это концепция, при которой структура файловой системы напрямую определяет маршруты (routes) в приложении. Она активно используется в современных фреймворках, таких как Next.js, Remix, Nuxt.js и других, позволяя строить маршруты без явного ручного конфигурирования.
Файловая маршрутизация основывается на том, что каждый файл в определённой директории автоматически соответствует определённому URL-маршруту. Например, если в проекте есть структура:
pages/
index.js
about.js
blog/
[id].js
То фреймворк создаст следующие маршруты:
/ — соответствует index.js/about — соответствует about.js/blog/:id — соответствует [id].jsКлючевым моментом является соответствие имени файла и пути
URL. Файлы с квадратными скобками [param] создают
динамические сегменты маршрута, которые позволяют получать значения
параметров из URL.
Динамические маршруты позволяют создавать универсальные страницы, обрабатывающие разные значения параметров. Синтаксис:
export default function Post({ params }) {
return <h1>Пост ID: {params.id}</h1>
}
Фреймворк автоматически извлекает значение параметра id
из URL /blog/123 и передаёт его в компонент. Для нескольких
параметров можно использовать вложенные директории:
pages/
blog/
[category]/
[postId].js
URL /blog/tech/42 соответствует параметрам
{ category: 'tech', postId: '42' }.
Файлы с именем index.js или index.tsx
создают маршрут на уровне родительской директории. Например:
pages/
blog/
index.js
будет соответствовать маршруту /blog. Это позволяет
структурировать проект, сохраняя логику вложенных страниц без
дублирования имени маршрута.
Для обработки неопределённого числа сегментов URL используют catch-all маршруты с тремя точками:
pages/
[...slug].js
Такой файл будет обрабатывать маршруты /a,
/a/b, /a/b/c и т.д. Параметр slug
при этом приходит как массив:
export default function Page({ params }) {
console.log(params.slug); // ['a', 'b', 'c']
}
Если нужно обработать хотя бы один сегмент, используется
[[...slug]], что делает параметр необязательным.
Вложенные маршруты создаются с помощью директорий. Например:
pages/
dashboard/
index.js
settings.js
profile.js
Будут созданы маршруты:
/dashboard — index.js/dashboard/settings — settings.js/dashboard/profile — profile.jsЭто позволяет организовать маршруты в иерархической структуре, делая проект более читаемым и поддерживаемым.
[param]
обязательно должны быть уникальными на одном уровне.[...param] должны находиться на одном
уровне с другими маршрутами, иначе возможны конфликты.Файловая маршрутизация упрощает интеграцию с серверными функциями.
Например, в Next.js для каждой страницы можно экспортировать
getStaticProps или getServerSideProps, чтобы
получать данные на этапе сборки или запроса:
export async function getServerSideProps(context) {
const { id } = context.params;
const data = await fetchData(id);
return { props: { data } };
}
Фреймворк автоматически связывает данные с маршрутом на основе структуры файлов.
Файловая маршрутизация является мощным инструментом для быстрого создания веб-приложений с логичной структурой URL и минимальным количеством конфигурации. Она сочетает автоматизацию и читаемость, позволяя разработчику сосредоточиться на логике приложения, а не на ручном управлении маршрутизатором.