cache response for an hour

This commit is contained in:
m5r
2025-09-20 13:17:37 +02:00
parent 44ebc2b487
commit 2acd6e0bc4

View File

@@ -8,7 +8,7 @@ type Env = {
export { RulesCache }; export { RulesCache };
export default { export default {
async fetch(request, env, _ctx): Promise<Response> { async fetch(request, env, ctx): Promise<Response> {
const url = new URL(request.url); const url = new URL(request.url);
const targetUrl = url.searchParams.get("url"); const targetUrl = url.searchParams.get("url");
@@ -16,17 +16,29 @@ export default {
return new Response("Missing url parameter", { status: 400 }); return new Response("Missing url parameter", { status: 400 });
} }
const cache = caches.default;
const cacheKey = new Request(`${url.origin}/cache/${encodeURIComponent(targetUrl)}`);
let response = await cache.match(cacheKey);
if (response) {
return response;
}
try { try {
const rulesStub = env.RULES_CACHE.getByName("rules"); const rulesStub = env.RULES_CACHE.getByName("rules");
const rules = await rulesStub.getRules(); const rules = await rulesStub.getRules();
const cleanedUrl = await cleanUrl(targetUrl, rules); const cleanedUrl = await cleanUrl(targetUrl, rules);
return new Response(cleanedUrl, { response = new Response(cleanedUrl, {
headers: { headers: {
"Content-Type": "text/plain", "Content-Type": "text/plain",
"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Origin": "*",
"Cache-Control": "public, max-age=3600",
}, },
}); });
ctx.waitUntil(cache.put(cacheKey, response.clone()));
return response;
} catch (error) { } catch (error) {
return new Response(`Error processing URL: ${error instanceof Error ? error.message : "Unknown error"}`, { return new Response(`Error processing URL: ${error instanceof Error ? error.message : "Unknown error"}`, {
status: 500, status: 500,