Jeremiahlee
11/28/2021, 9:27 PMJeremiahlee
11/28/2021, 9:29 PMJeremiahlee
11/28/2021, 9:31 PMWalshy | Pages
11/28/2021, 9:32 PMJeremiahlee
11/28/2021, 9:32 PMWalshy | Pages
11/28/2021, 9:34 PMjs
const ScriptName = '/js/script.js';
const Endpoint = '/api/event';
const ScriptWithoutExtension = ScriptName.replace('.js', '');
export async function onRequest({ request, waitUntil }) {
const pathname = new URL(request.url).pathname
const [baseUri, ...extensions] = pathname.split('.')
if (baseUri.endsWith(ScriptWithoutExtension)) {
return getScript(request, waitUntil, extensions)
} else if (pathname.endsWith(Endpoint)) {
return postData(request)
}
return new Response(null, { status: 404 })
}
async function getScript(request, waitUntil, extensions) {
let response = await caches.default.match(request);
if (!response) {
response = await fetch("https://plausible.io/js/plausible." + extensions.join("."));
waitUntil(caches.default.put(request, response.clone()));
}
return response;
}
async function postData(req) {
const request = new Request(req);
request.headers.delete('cookie');
return await fetch("https://plausible.io/api/event", request);
}
Jeremiahlee
11/28/2021, 10:44 PMTypeError: Illegal invocation at Object.waitUntil
error. It must be called from an instanceof ExecutionContext
.
These docs suggest that context.waitUntil
is passed to the Pages Function. https://developers.cloudflare.com/pages/platform/functions#writing-your-first-function
My code:
export async function onRequest(context) {
let forwardedRequest = await caches.default.match(context.request);
if (!forwardedRequest) {
forwardedRequest = await fetch("https://plausible.io/js/plausible.outbound-links.js");
context.waitUntil(caches.default.put(context.request, forwardedRequest.clone()));
}
return forwardedRequest;
}
Jeremiahlee
11/28/2021, 10:46 PMnpx wrangler pages dev
Erwin
11/28/2021, 11:40 PMthis
inside context
isn't bound properly.. but I remember seeing the code that does the binding while investigating something else. This is something the Pages team should have a look at. It is very possible a bug in the pages dev
part of WranglerErwin
11/28/2021, 11:46 PMGreg Brimble | Cloudflare Pages
11/28/2021, 11:54 PMErwin
11/28/2021, 11:55 PMWalshy | Pages
11/28/2021, 11:57 PMErwin
11/29/2021, 12:00 AMWalshy | Pages
11/29/2021, 12:00 AMWalshy | Pages
11/29/2021, 12:01 AMJosh
11/29/2021, 12:03 AMErwin
11/29/2021, 1:01 AMErwin
11/29/2021, 1:01 AMWilliam | Chaos Management
11/29/2021, 1:03 AMrkusa
11/29/2021, 8:17 AMwaitUntil
when deploying, not just locally via pages dev
(see https://discord.com/channels/595317990191398933/910978223968518144/914538090826182767). Just in case the upcoming fix only applies to pages dev
.Deleted User
11/29/2021, 9:21 AMDeleted User
11/29/2021, 9:21 AMErwin
11/29/2021, 10:28 AMAdriaan
11/29/2021, 12:23 PMresponse.headers.append("Set-Cookie", "test=true")
and it works on the pages platform, just not in Wrangler dev. Other headers are coming through in Wrangler dev.Greg Brimble | Cloudflare Pages
11/29/2021, 12:47 PMKev
11/29/2021, 1:01 PMKev
11/29/2021, 1:01 PMprocess.env["SOME_API_KEY"]
does not seem to do the trick