INTEGRITY Документация

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

Functions используют файловую маршрутизацию. Ваш /functions структура директорий определяет маршруты, на которых будут выполняться ваши Functions. Вы можете создать /functions директория с таким количеством уровней, какое требуется для задач вашего проекта. Рассмотрим следующую директорию:

На основе приведённой выше структуры файлов будут сгенерированы следующие маршруты. Эти маршруты сопоставляют шаблон URL-адреса с /functions файл, который вызывается, когда посетитель переходит по URL:

Путь к файлу Маршрут
/functions/index.js example.com
/functions/helloworld.js example.com/helloworld
/functions/howdyworld.js example.com/howdyworld
/functions/fruits/index.js example.com/fruits
/functions/fruits/apple.js example.com/fruits/apple
/functions/fruits/banana.js example.com/fruits/banana

Если для Function не находится совпадения, она будет использовать статический ресурс, если он есть. В противном случае Function будет использовать в качестве резервного варианта поведение маршрутизации по умолчанию для статических файлов Pages.

Динамические маршруты

Динамические маршруты позволяют сопоставлять URL с параметризованными сегментами. Это полезно при создании динамических приложений: вы можете принимать динамические значения, которые сопоставляются с одним путем, изменив имя файла.

Одиночные сегменты пути

Чтобы создать динамический маршрут, заключите имя файла в квадратные скобки, например, /users/[user].js. Тем самым вы создаете заполнитель для одного сегмента пути:

Путь Совпадение?
/users/nevi Да
/users/daniel Да
/profile/nevi Нет
/users/nevi/foobar Нет
/nevi Нет

Составные сегменты пути

Если заключить имя файла в двойные квадратные скобки, например, /users/[[user]].js : вы сопоставляете маршрут любой глубины после /users/:

Путь Совпадение?
/users/nevi Да
/users/daniel Да
/profile/nevi Нет
/users/nevi/foobar Да
/users/daniel/xyz/123 Да
/nevi Нет

Примеры динамических маршрутов

Ознакомьтесь со следующим /functions/ структура директорий:

Следующие запросы будут соответствовать следующим файлам:

Запрос Файл
/foo Запрос будет направлен на статический ресурс, если он доступен.
/date /date.js
/users/daniel /users/[user].js
/users/nevi /users/[user].js
/users/special /users/special.js
/users/daniel/xyz/123 /users/[[catchall]].js

Сегмент(ы) URL-адреса, соответствующие заполнителю ([user]) будет доступен в запросе context объект. context.params объект можно использовать, чтобы найти значение, соответствующее заданному заполнителю имени файла.

Для файлов, соответствующих одному сегменту URL (используется одна пара скобок), значения возвращаются в виде строки:

export function onRequest(context) {
	return new Response(context.params.user);
}

Описанная выше логика вернёт daniel для запросов к /users/daniel.

Для файлов, соответствующих нескольким сегментам URL (используется двойная пара скобок), значения возвращаются в виде массива:

export function onRequest(context) {
	return new Response(JSON.stringify(context.params.catchall));
}

Описанная выше логика вернёт ["daniel", "xyz", "123"] для запросов к /users/daniel/xyz/123.

Маршруты вызова Functions

Для полностью статического проекта Pages предоставляет неограниченное количество бесплатных запросов. Однако как только вы добавляете Functions в проект Pages, все запросы по умолчанию начинают вызывать вашу Function. Чтобы сохранить неограниченное количество бесплатных статических запросов, исключите статические маршруты проекта, создав _routes.json файл. Этот файл будет создан автоматически, если functions директория обнаружена в вашем проекте при публикации проекта с помощью Pages CI или Wrangler.

Создайте _routes.json файл

Создайте _routes.json файл, чтобы управлять тем, когда вызывается Function. Его следует разместить в каталоге сборки проекта.

Каталоги сборки по умолчанию

Ниже приведены стандартные команды сборки и каталоги для популярных фреймворков и инструментов.

Фреймворк/инструментКоманда сборкиДиректория сборки
React (Vite)npm run builddist
Gatsbynpx gatsby buildpublic
Next.js (статический экспорт HTML)npx next buildout
Nuxt.jsnpm run builddist
Qwiknpm run builddist
Remixnpm run buildbuild/client
Sveltenpm run buildpublic
SvelteKitnpm run build.svelte-kit/cloudflare
Vuenpm run builddist
Analognpm run builddist/analog/public
Astronpm run builddist
Angularnpm run builddist/cloudflare
Brunchnpx brunch build --productionpublic
Docusaurusnpm run buildbuild
Elder.jsnpm run buildpublic
Eleventynpx @11ty/eleventy_site
Ember.jsnpx ember-cli builddist
GitBooknpx gitbook-cli build_book
Gridsomenpx gridsome builddist
Hugohugopublic
Jekylljekyll build_site
MkDocsmkdocs buildsite
Pelicanpelican contentoutput
React Staticreact-static builddist
Slate./deploy.shbuild
Uminpx umi builddist
VitePressnpx vitepress build.vitepress/dist
Zolazola buildpublic

Этот файл будет включать три свойства:

Пример конфигурации

Ниже приведён пример _routes.json.

{
	"version": 1,
	"include": ["/*"],
	"exclude": []
}

Это _routes.json будет вызывать ваши Functions на всех маршрутах.

Ниже приведён ещё один пример _routes.json файл. Любой маршрут внутри /build директорию не вызовет Function и не приведет к списанию платы за вызов Functions.

{
	"version": 1,
	"include": ["/*"],
	"exclude": ["/build/*"]
}

Fail open / closed

Если вы используете тариф Workers Free, вы можете настроить поведение Pages при исчерпании дневного лимита бесплатного тарифа на запросы Pages Functions. Например, если в Pages Functions выполняются проверки аутентификации или другая критически важная логика, вы можете отключать свой проект Pages при исчерпании лимита.

  1. На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. Выберите свой проект Pages.

  3. Перейдите в Настройки > Runtime > Fail open / closed.

«Разрешать при сбое» означает, что статические ресурсы продолжат обслуживаться, даже если Pages Functions обычно должны были сработать первыми. «Блокировать при сбое» означает, что вместо статических ресурсов будет возвращена страница ошибки.

Суточный лимит запросов для Pages Functions можно полностью снять, перейдя на Workers Standard.

Лимиты

Для маршрутов вызова Functions действуют следующие ограничения: