Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ミドルウェア

最終更新 Markdown で表示Agent セットアップ

ミドルウェアは、onRequest 関数の前に実行できる再利用可能なロジックです。ミドルウェアは通常、ユーティリティ関数です。エラー処理、ユーザー認証、ログ出力は、アプリケーション内のミドルウェアの典型的な用途です。

ミドルウェアを追加する

ミドルウェアは通常の Pages Functions に似ていますが、常にプロジェクトの /functions ディレクトリにある _middleware.js ファイルで定義します。_middleware.js ファイルは onRequest 関数をエクスポートします。ミドルウェアは、同じ /functions ディレクトリ(サブディレクトリを含む)内の Pages Functions に一致するリクエストで実行されます。たとえば、functions/users/_middleware.js/functions/users/nevi/functions/users/nevi/123functions/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") != "admin@example.com") {
		return new Response("Unauthorized", { status: 403 });
	}

	return context.next();
}

export const onRequest = [errorHandling, authentication];

上記の例では、まず errorHandling 関数が実行されます。authentication 関数のエラーと、その後に続く Pages Functions のエラーを捕捉します。

役に立ちましたか?