コンテンツにスキップ

動的ディスパッチワーカーの作成

ディスパッチネームスペースを作成した後、動的ディスパッチワーカーを使用してネームスペース内の任意のユーザーワーカーを取得できます。動的ディスパッチワーカーにはネームスペースバインディングがあります。

サブドメインの読み取り、リクエストヘッダー、またはデータベースの検索など、ネームスペース付きワーカーへのルーティング方法を使用します。最終的には、ユーザーワーカーの名前が必要です。

以下の例では、ユーザーワーカーへのルーティングはサブドメイン<USER_WORKER_NAME>.example.com/*を読み取ることで行われます。たとえば、my-customer.example.comは、PUT accounts/<ACCOUNT_ID>/workers/dispatch/namespaces/my-dispatch-namespace/scripts/my-customerにアップロードされたスクリプトを実行します。

export default {
async fetch(request, env) {
try {
// URLを解析し、サブドメインを読み取る
let workerName = new URL(request.url).host.split('.')[0];
let userWorker = env.dispatcher.get(workerName);
return await userWorker.fetch(request);
} catch (e) {
if (e.message.startsWith('Worker not found')) {
// 私たちは、ディスパッチネームスペースに存在しないワーカーを取得しようとしました
return new Response('', { status: 404 });
}
// これは`fetch()`からの他の例外である可能性があります *または* 呼び出されたワーカーによってスローされた例外です
// (たとえば、ディスパッチされたワーカーが`throw MyException()`を持っている場合、ここでそれを確認できます)。
return new Response(e.message, { status: 500 });
}
},
};