我希望在GET
,POST
或PUT
到同一个网址或任何网址时,从我的服务工作人员中取消先前缓存的DELETE
一个资源或集合'在'它发生了,例如:
让我们说我缓存/subscriptions
,之后我会POST
添加/subscriptions
添加新订阅,或者说我PUT
来/subscriptions/243
1}}更新现有订阅。
这意味着我的缓存订阅集合现在是陈旧数据,我想从缓存中删除它,以便下一个请求将转到服务器。
我想到了两个选项,我不确定是否可能:
我可以在caches.match()
来电中使用正则表达式吗?
这样我就可以将请求的url的父集合段与缓存中找到的键匹配。
我可以获取每个缓存数据响应的密钥吗?
如果是这样,我可以遍历每个响应,看看密钥是否符合我删除它的标准。
有什么想法吗? 谢谢!
答案 0 :(得分:3)
通过caches.match()
进行查询时,不能使用RegExp或字符串匹配以外的任何内容(可选ignoring query parameters)。
我建议使用第二种方法,在其中打开命名缓存get its keys,然后筛选您关注的缓存。代码不是那么多,await
/ async
看起来相当不错:
async function deleteCacheEntriesMatching(cacheName, regexp) {
const cache = await caches.open(cacheName);
const cachedRequests = await cache.keys();
// request.url is a full URL, not just a path, so use an appropriate RegExp!
const requestsToDelete = cachedRequests.filter(request => request.url.match(regexp));
return Promise.all(requestsToDelete.map(request => cache.delete(request)));
}
// Call it like:
await deleteCacheEntriesMatching('my-cache', new RegExp('/subscriptions'));