From 1c8ae42b2073ad60010d43f66b296243a0988329 Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Sun, 9 Jun 2024 23:09:58 -0700 Subject: [PATCH] Implement stale-while-revalidate caching on edge --- functions/api.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/functions/api.js b/functions/api.js index 572a116..a9c4e61 100644 --- a/functions/api.js +++ b/functions/api.js @@ -1,6 +1,6 @@ import { getGoogleAuthToken } from './auth.js'; -export async function onRequestGet({ request, env }) { +export async function onRequestGet({ request, env, waitUntil }) { const url = new URL(request.url); const queryUrl = new URL(decodeURIComponent(url.search.substring(1))); @@ -10,6 +10,15 @@ export async function onRequestGet({ request, env }) { } const token = await getGoogleAuthToken(env.EMAIL, env.PRIVATE_KEY, 'https://www.googleapis.com/auth/spreadsheets.readonly https://www.googleapis.com/auth/documents.readonly'); - - return fetch(queryUrl, { headers: { Authorization: `Bearer ${token}` } }); + const responsePromise = fetch(queryUrl, { headers: { Authorization: `Bearer ${token}` } }); + const cachedResponse = await caches.default.match(queryUrl); + if (cachedResponse) { + waitUntil(responsePromise.then(response => caches.default.put(queryUrl, response))); + return cachedResponse; + } + else { + const response = await responsePromise; + waitUntil(caches.default.put(queryUrl, response.clone())); + return response; + } } -- 2.47.3