ミドルウェアは、onRequest 関数の前に実行できる再利用可能なロジックです。ミドルウェアは通常、ユーティリティ関数です。エラー処理、ユーザー認証、ログ出力は、アプリケーション内のミドルウェアの典型的な用途です。
ミドルウェアは通常の Pages Functions に似ていますが、常にプロジェクトの /functions ディレクトリにある _middleware.js ファイルで定義します。_middleware.js ファイルは onRequest 関数をエクスポートします。ミドルウェアは、同じ /functions ディレクトリ(サブディレクトリを含む)内の Pages Functions に一致するリクエストで実行されます。たとえば、functions/users/_middleware.js は /functions/users/nevi、/functions/users/nevi/123、functions/users へのリクエストに一致します。
アプリケーション全体(静的ファイルの前を含む)でミドルウェアを実行したい場合は、functions/_middleware.js ファイルを作成します。
_middleware.js ファイルでは、onRequest ハンドラー、またはメソッド固有のバリアントをエクスポートできます。次の例は、プロジェクトの Pages Functions で発生したエラーを処理するミドルウェアです。リクエストハンドラーのコンテキストオブジェクトで使える next() メソッドを使っています。
export async function onRequest(context) {
try {
return await context.next();
} catch (err) {
return new Response(`${err.message}\n${err.stack}`, { status: 500 });
}
}ミドルウェアハンドラーとして、Pages Functions の配列をエクスポートできます。実行したい複数のミドルウェアをチェーンできます。次の例では、プロジェクトの Functions で発生したエラーを処理し、ユーザーが認証済みかどうかを確認します。
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];上記の例では、まず errorHandling 関数が実行されます。authentication 関数のエラーと、その後に続く Pages Functions のエラーを捕捉します。