以下路由定义将json数据存储为缓存存储中的MyCachedData,而IndexDb仅存储url和timestamp。
workboxSW.router.registerRoute('/MyApi(.*)',
workboxSW.strategies.staleWhileRevalidate({
cacheName: 'MyCachedData',
cacheExpiration: {
maxEntries: 50
},
cacheableResponse: {statuses: [0, 200]}
})
);
是否可以仅将json数据存储在索引db中,如何定义它以使用Workbox拦截(添加,更新,删除)?
答案 0 :(得分:2)
不,Workbox依靠Cache Storage API来存储响应正文。 (正如您所观察到的,它使用IndexedDB来获取用于缓存过期的一些带外管理信息,如时间戳。)
如果使用Cache Storage API的方法不适合您的用例(最好听听为什么不这样做?),那么我建议您直接更新IndexedDB,也许可以通过包含库{{{ 3}}
答案 1 :(得分:1)
您可以编写一个自定义函数来执行获取并将信息存储在indexedDB中,但这将与Workbox在确保您只获取API请求之外的任何内容分开。
这未经过测试,但有类似的内容:
workboxSW.router.registerRoute(
'/MyApi(.*)',
(event) => {
// TODO:
// 1. Check if entry if in indexedDB
// 1a. If it is then return new Response('<JSON Data from IndexedDB>');
// 1b. If not call fetch(event.request)
// Then parse fetch response, save to indexeddb
// Then return the response.
}
);