INTEGRITY Dokumentace

Middleware

Middleware je opakovaně použitelná logika, kterou lze spustit ještě před vaší onRequest funkce. Middleware jsou obvykle pomocné funkce. Typickými kandidáty na middleware v rámci aplikace jsou zpracování chyb, ověřování uživatelů a logování.

Přidejte middleware

Middleware je podobný standardním Pages Functions, ale vždy se definuje v souboru _middleware.js soubor v adresáři vašeho projektu /functions adresář. _middleware.js soubor exportuje onRequest funkce. Middleware se spustí u požadavků, které odpovídají libovolným Pages Functions ve stejné /functions adresář, včetně podadresářů. Například functions/users/_middleware.js soubor bude odpovídat požadavkům na /functions/users/nevi, /functions/users/nevi/123 a functions/users.

Pokud chcete middleware spustit pro celou aplikaci, včetně statických souborů, vytvořte functions/_middleware.js .

V _middleware.js souborů můžete exportovat onRequest handler nebo jakoukoli jeho variantu specifickou pro danou metodu. Následuje ukázkový middleware, který zpracovává veškeré chyby vyvolané v Pages Functions vašeho projektu. Tento příklad používá next() metodu dostupnou v objektu kontextu handleru požadavků:

export async function onRequest(context) {
	try {
		return await context.next();
	} catch (err) {
		return new Response(`${err.message}\n${err.stack}`, { status: 500 });
	}
}

Řetězení middlewaru

Jako middleware handler můžete exportovat pole Pages Functions. Díky tomu můžete zřetězit více middlewarů, které chcete spustit. V následujícím příkladu ošetříte veškeré chyby vzniklé ve Functions vašeho projektu a zkontrolujete, zda je uživatel přihlášený:

async function errorHandling(context) {
	try {
		return await context.next();
	} catch (err) {
		return new Response(`${err.message}\n${err.stack}`, { status: 500 });
	}
}

function authentication(context) {
	if (context.request.headers.get("x-email") != "[email protected]") {
		return new Response("Unauthorized", { status: 403 });
	}

	return context.next();
}

export const onRequest = [errorHandling, authentication];

Ve výše uvedeném příkladu errorHandling funkce se spustí jako první. Zachytí veškeré chyby v authentication funkci a jakékoli chyby v dalších navazujících Pages Functions.