Modify request property
Create a modified request with edited properties based off of an incoming request.
/** * Example someHost is set up to return raw JSON * @param {string} someUrl the URL to send the request to, since we are setting hostname too only path is applied * @param {string} someHost the host the request will resolve too */
const someHost = 'example.com';
const someUrl = 'https://foo.example.com/api.js';
async function handleRequest(request) { /** * The best practice is to only assign new RequestInit properties * on the request object using either a method or the constructor */ const newRequestInit = { // Change method method: 'POST', // Change body body: JSON.stringify({ bar: 'foo' }), // Change the redirect mode. redirect: 'follow', // Change headers, note this method will erase existing headers headers: { 'Content-Type': 'application/json', }, // Change a Cloudflare feature on the outbound response cf: { apps: false }, };
// Change just the host const url = new URL(someUrl);
url.hostname = someHost;
// Best practice is to always use the original request to construct the new request // to clone all the attributes. Applying the URL also requires a constructor // since once a Request has been constructed, its URL is immutable. const newRequest = new Request(url.toString(), new Request(request, newRequestInit));
// Set headers using method newRequest.headers.set('X-Example', 'bar'); newRequest.headers.set('Content-Type', 'application/json'); try { return await fetch(newRequest); } catch (e) { return new Response(JSON.stringify({ error: e.message }), { status: 500 }); }
}
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request));
});