動的ディスパッチワーカーの作成
ディスパッチネームスペースを作成した後、動的ディスパッチワーカーを使用してネームスペース内の任意のユーザーワーカーを取得できます。動的ディスパッチワーカーにはネームスペースバインディングがあります。
サブドメインの読み取り、リクエストヘッダー、またはデータベースの検索など、ネームスペース付きワーカーへのルーティング方法を使用します。最終的には、ユーザーワーカーの名前が必要です。
以下の例では、ユーザーワーカーへのルーティングはサブドメイン<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 }); } },};