[英]Service workers: Invalidate specific cached responses
当POST
, PUT
或DELETE
到相同的url或资源或集合'ur'的任何url时,我想要从我的服务工作者中使以前缓存的GET
无效,例如:
假设我缓存/subscriptions
,稍后我会对/subscriptions
执行POST
以添加新订阅,或者说我PUT
到/subscriptions/243
以更新现有订阅。 这意味着我的缓存订阅集合现在是陈旧数据,我想从缓存中删除它,以便下一个请求将转到服务器。
我想到了两个选项,我不确定是否可能:
我可以在caches.match()
调用中使用Regexp吗?
这样我就可以将请求的url的父集合片段与缓存中找到的键匹配。
我可以获取每个缓存数据响应的密钥吗?
如果是这样,我可以遍历每个响应,看看密钥是否符合我删除它的标准。
有任何想法吗? 谢谢!
在通过caches.match()
进行查找时,不能使用RegExp或字符串匹配以外的任何内容(可选地忽略查询参数 caches.match()
。
我建议使用第二种方法,在其中打开命名缓存, 获取其密钥 ,然后筛选您关心的缓存。 这不是那么多代码,并且使用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'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.