【发布时间】:2021-11-08 06:38:23
【问题描述】:
我在这个简单的工人身上花了一整天的时间,却一无所获。
我已经关注了 CloudFlare 网站上的 Cache API 示例,还浏览了 StackOverflow 的帖子,但我仍然无处可去。
这篇文章 (Trouble with Cloudflares Worker Cache API) 看起来是我需要的,但它没有帮助。
基本上所有我想要做的就是使用缓存 API 将某些页面缓存一段时间。我最终需要为每个国家/地区代码做特定的缓存(这就是我使用工人而不是页面规则的原因),但现在我要做的只是让基本的缓存 API 作为测试工作。
这是代码,与他们网站上的示例代码基本相同
handler.ts
export async function handleRequest(event: FetchEvent): Promise<Response> {
const { request } = event
const cacheUrl = new URL(request.url)
const cacheKey = new Request(cacheUrl.toString(), request)
const cache = caches.default
let response = await cache.match(cacheKey)
if (!response) {
console.log('NO CACHE MATCH')
// If not in cache, get it from origin
response = await fetch(request)
// Must use Response constructor to inherit all of response's fields
response = new Response(response.body, response)
response.headers.append('Cache-Control', 's-maxage=10')
event.waitUntil(cache.put(cacheKey, response.clone()))
}
return response
}
index.ts
import { handleRequest } from './handler'
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event))
})
我知道您不能在workers.dev 域中使用缓存API,因此我已将worker 部署到自定义域,因此它应该可以访问API。
我试过了
- 从 cache.put 中注销响应 - 什么都没有
- 将缓存键从响应 obj 更改为 URL(字符串)- 无
- 直接等待 cache.put - 什么都没有
- 使用自定义缓存命名空间(所以 await caches.open('pages')) - 没有
基本上,我只是缓存未命中,请求通过我的网络服务器。我可以看到控制台日志,一切运行良好,只是从不缓存或永远找不到缓存。
调试起来非常困难,而且这些方法几乎没有返回任何信息。 cache.put 什么都不返回,cache.match 什么都不返回。他们还不如被嘲笑。
我正在使用 wrangler 构建/发布,那里一切正常。
有人可以帮忙吗?
【问题讨论】:
标签: javascript cloudflare cloudflare-workers