Skip to content

Commit 0aa0498

Browse files
authored
feat: handle no-cache in bff (#333)
1 parent 00d6f28 commit 0aa0498

File tree

1 file changed

+26
-14
lines changed
  • libs/blog-bff/shared/util-middleware/src/lib

1 file changed

+26
-14
lines changed

libs/blog-bff/shared/util-middleware/src/lib/kv-cache.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export const kvCache = (options: {
1717
ttl?: number; // TTL in seconds
1818
}): MiddlewareHandler => {
1919
return async function kvCache(c, next) {
20+
const cacheControl = c.req.header('Cache-Control') || '';
21+
const noCache = /no-cache/.test(cacheControl);
22+
2023
let key = c.req.url;
2124
if (options.keyGenerator) {
2225
key = await options.keyGenerator(c);
@@ -26,22 +29,26 @@ export const kvCache = (options: {
2629
key = options.cacheKeyPrefix + key;
2730
}
2831

29-
// Attempt to retrieve the cached response
30-
const cachedResponseBody = await options.kvNamespace.get(
31-
key,
32-
'arrayBuffer',
33-
);
34-
if (cachedResponseBody) {
35-
// Retrieve stored headers
36-
const cachedHeadersJson = await options.kvNamespace.get(key + ':headers');
37-
const headers = new Headers();
38-
if (cachedHeadersJson) {
39-
const headersObj = JSON.parse(cachedHeadersJson);
40-
for (const [k, v] of Object.entries(headersObj)) {
41-
headers.set(k, v as string);
32+
if (!noCache) {
33+
// Attempt to retrieve the cached response
34+
const cachedResponseBody = await options.kvNamespace.get(
35+
key,
36+
'arrayBuffer',
37+
);
38+
if (cachedResponseBody) {
39+
// Retrieve stored headers
40+
const cachedHeadersJson = await options.kvNamespace.get(
41+
key + ':headers',
42+
);
43+
const headers = new Headers();
44+
if (cachedHeadersJson) {
45+
const headersObj = JSON.parse(cachedHeadersJson);
46+
for (const [k, v] of Object.entries(headersObj)) {
47+
headers.set(k, v as string);
48+
}
4249
}
50+
return new Response(cachedResponseBody, { headers });
4351
}
44-
return new Response(cachedResponseBody, { headers });
4552
}
4653

4754
// Proceed to the next middleware or handler
@@ -52,6 +59,11 @@ export const kvCache = (options: {
5259
return;
5360
}
5461

62+
// Do not cache the response if `no-cache` was passed
63+
if (noCache) {
64+
return;
65+
}
66+
5567
// Clone the response to read its body
5668
const resClone = c.res.clone();
5769
const resBody = await resClone.arrayBuffer();

0 commit comments

Comments
 (0)