Aggregate requests
Send two GET request to two urls and aggregates the responses into one response.
export default {async fetch(request) {/*** someHost is set up to return JSON responses* Replace url1 and url2 with the hosts you wish to send requests to* @param {string} url the URL to send the request to*/const someHost = "https://examples.cloudflareworkers.com/demos";const url1 = someHost + "/requests/json";const url2 = someHost + "/requests/json";const type = "application/json;charset=UTF-8";/*** gatherResponse awaits and returns a response body as a string.* Use await gatherResponse(..) in an async function to get the response body* @param {Response} response*/async function gatherResponse(response) {const { headers } = response;const contentType = headers.get("content-type") || "";if (contentType.includes("application/json")) {return JSON.stringify(await response.json());} else if (contentType.includes("application/text")) {return response.text();} else if (contentType.includes("text/html")) {return response.text();} else {return response.text();}}const init = {headers: {"content-type": type,},};const responses = await Promise.all([fetch(url1, init), fetch(url2, init)]);const results = await Promise.all([gatherResponse(responses[0]),gatherResponse(responses[1]),]);return new Response(results.join(), init);},};
const handler: ExportedHandler = {async fetch(request: Request) {/*** someHost is set up to return JSON responses* Replace url1 and url2 with the hosts you wish to send requests to* @param {string} url the URL to send the request to*/const someHost = "https://examples.cloudflareworkers.com/demos";const url1 = someHost + "/requests/json";const url2 = someHost + "/requests/json";const type = "application/json;charset=UTF-8";/*** gatherResponse awaits and returns a response body as a string.* Use await gatherResponse(..) in an async function to get the response body* @param {Response} response*/async function gatherResponse(response) {const { headers } = response;const contentType = headers.get("content-type") || "";if (contentType.includes("application/json")) {return JSON.stringify(await response.json());} else if (contentType.includes("application/text")) {return response.text();} else if (contentType.includes("text/html")) {return response.text();} else {return response.text();}}const init = {headers: {"content-type": type,},};const responses = await Promise.all([fetch(url1, init), fetch(url2, init)]);const results = await Promise.all([gatherResponse(responses[0]),gatherResponse(responses[1]),]);return new Response(results.join(), init);},};export default handler;