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

Расширенный режим

Расширенный режим позволяет разрабатывать Pages Functions с помощью _worker.js файл, а не /functions каталог.

В некоторых случаях встроенная в Pages Functions система маршрутизации по пути к файлу и middleware не подходит для существующих приложений. У вас может быть сложный Worker, который трудно разбить на части в соответствии с файловой системой маршрутизации Pages. Для таких случаев Pages позволяет определить _worker.js файл в выходном каталоге вашего проекта Pages.

При использовании _worker.js файл, весь /functions директория игнорируется, включая её маршрутизацию и промежуточное ПО. Вместо этого _worker.js файл развёртывается и должен быть написан с использованием Синтаксис Module Worker. Если вы никогда не использовали синтаксис Module, обратитесь к Запись в блоге о модулях JavaScript чтобы узнать больше. Синтаксис модулей позволяет JavaScript-фреймворкам создавать Worker как часть содержимого выходного каталога Pages.

Настройка Function

В расширенном режиме ваша Function берет на себя полный контроль над всеми входящими HTTP запросами к вашему домену. Function обязана самостоятельно выполнять или перенаправлять запросы к статическим ресурсам проекта. Если этого не сделать, поведение будет нарушено или непредсказуемо. Function должна быть написана в синтаксисе Module.

После выполнения _worker.js файл в выходном каталоге, добавьте следующий фрагмент кода:

export default {
	async fetch(request, env) {
		const url = new URL(request.url);
		if (url.pathname.startsWith("/api/")) {
			// TODO: Add your custom /api/* logic here.
			return new Response("Ok");
		}
		// Otherwise, serve the static assets.
		// Without this, the Worker will error and no assets will be served.
		return env.ASSETS.fetch(request);
	},
};
// Note: You would need to compile your TS into JS and output it as a `_worker.js` file. We do not read `_worker.ts`

interface Env {
	ASSETS: Fetcher;
}

export default {
	async fetch(request, env): Promise<Response> {
		const url = new URL(request.url);
		if (url.pathname.startsWith("/api/")) {
			// TODO: Add your custom /api/* logic here.
			return new Response("Ok");
		}
		// Otherwise, serve the static assets.
		// Without this, the Worker will error and no assets will be served.
		return env.ASSETS.fetch(request);
	},
} satisfies ExportedHandler<Env>;

В приведённом выше коде вы настроили Function на возврат ответа для всех запросов, направленных на /api/. В противном случае Function вернется к выдаче статических ресурсов.

Миграция с Workers

Чтобы перенести существующий Worker в проект Pages, скопируйте код Worker и вставьте его в новый _worker.js файл. Затем настройте обработку статических файлов, добавив следующий фрагмент кода в _worker.js:

return env.ASSETS.fetch(request);

Разверните вашу функцию

После того как вы настроите новую Function или перенесёте Worker на _worker.js, убедитесь, что ваш _worker.js файл помещается в выходной каталог проекта Pages. Чтобы включить расширенный режим, разверните проект через интеграцию с Git.