ミドルウェア
ミドルウェアは、onRequest 関数の前に実行できる再利用可能なロジックです。ミドルウェアは通常、ユーティリティ関数です。エラーハンドリング、ユーザー認証、ロギングは、アプリケーション内のミドルウェアの典型的な候補です。
ミドルウェアは標準のページ関数に似ていますが、ミドルウェアは常にプロジェクトの /functions ディレクトリ内の _middleware.js ファイルで定義されます。_middleware.js ファイルは、onRequest 関数をエクスポートします。ミドルウェアは、同じ /functions ディレクトリ内のページ関数に一致するリクエストで実行され、サブディレクトリも含まれます。たとえば、functions/users/_middleware.js ファイルは、/functions/users/nevi、/functions/users/nevi/123、および functions/users へのリクエストに一致します。
アプリケーション全体でミドルウェアを実行したい場合は、静的ファイルの前でも、functions/_middleware.js ファイルを作成します。
_middleware.js ファイルでは、onRequest ハンドラーまたはそのメソッド固有のバリアントをエクスポートできます。以下は、プロジェクトのページ関数でスローされたエラーを処理するミドルウェアの例です。この例では、リクエストハンドラーのコンテキストオブジェクトで利用可能な next() メソッドを使用しています:
export async function onRequest(context) { try { return await context.next(); } catch (err) { return new Response(`${err.message}\n${err.stack}`, { status: 500 }); }}ページ関数の配列をミドルウェアハンドラーとしてエクスポートできます。これにより、実行したい複数のミドルウェアをチェーンすることができます。以下の例では、プロジェクトの関数から生成されたエラーを処理し、ユーザーが認証されているかどうかを確認できます:
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") != "admin@example.com") { return new Response("Unauthorized", { status: 403 }); }
return context.next();}
export const onRequest = [errorHandling, authentication];上記の例では、errorHandling 関数が最初に実行されます。これにより、authentication 関数内のエラーや、他のすべての後続のページ関数内のエラーをキャッチします。