← Cloudflare Pages / pages / functions
Pokročilý režim
Pokročilý režim umožňuje vyvíjet Pages Functions pomocí _worker.js soubor místo /functions adresář.
V některých případech není vestavěný systém směrování Pages Functions založený na cestách k souborům a middleware pro stávající aplikace vhodný. Můžete mít Worker, který je složitý a obtížně se rozděluje do systému směrování Pages založeného na souborech. Pro tyto případy nabízí Pages možnost definovat _worker.js soubor ve výstupním adresáři vašeho projektu Pages.
Při použití _worker.js soubor, celý /functions adresář je ignorován, včetně jeho vlastností směrování a middlewaru. Místo toho _worker.js soubor se nasazuje a musí být napsán pomocí Syntaxe Module Worker. Pokud jste ještě nikdy nepoužili syntaxi Modulů, podívejte se na článek na blogu o JavaScript modulech ↗ a zjistěte více. Díky modulové syntaxi mohou JavaScriptové frameworky generovat Worker jako součást obsahu výstupního adresáře Pages.
Nastavení Function
V pokročilém režimu převezme vaše Function plnou kontrolu nad všemi příchozími HTTP požadavky na vaši doménu. Vaše Function musí požadavky na statické assety projektu buď vytvářet, nebo je předávat dál. Pokud to neuděláte, dojde k nefunkčnímu nebo nežádoucímu chování. Vaše Function musí být napsaná v syntaxi Module.
Po provedení _worker.js soubor ve vašem výstupním adresáři přidejte následující úryvek kódu:
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>;Ve výše uvedeném kódu jste nakonfigurovali svou Function tak, aby vracela odpověď na všechny požadavky směřující na /api/. V opačném případě se vaše Function vrátí zpět k vracení statických assets.
-
env.ASSETS.fetch()funkce vám umožní vracet aktiva pro daný požadavek. envje objekt, který obsahuje vaše proměnné prostředí a bindings.ASSETSje výchozí vazba funkce, která umožňuje komunikaci mezi vaší funkcí a prostředkem Pages pro poskytování aktiv.fetch()volání na zdroj Pages pro obsluhu statických souborů a vrátí požadovaný soubor.
Migrace z Workers
Chcete-li do projektu Pages migrovat existující Worker, zkopírujte jeho kód a vložte jej do nového _worker.js soubor. Statická aktiva poté zpracujte přidáním následujícího úryvku kódu do _worker.js:
return env.ASSETS.fetch(request);Nasaďte svou funkci
Jakmile nastavíte novou Function nebo migrujete Worker na _worker.js, ujistěte se, že váš _worker.js soubor je umístěn ve výstupním adresáři projektu Pages. Aby se uplatnil pokročilý režim, nasaďte projekt prostřednictvím integrace Git.