0

下面的路由定義爲將json數據存儲爲緩存存儲中的MyCachedData,並且IndexDb僅存儲url和時間戳。工作箱只緩存indexDb的時間戳,如何攔截indexDb中的json數據?

workboxSW.router.registerRoute('/MyApi(.*)', 
workboxSW.strategies.staleWhileRevalidate({ 
    cacheName: 'MyCachedData', 
    cacheExpiration: { 
     maxEntries: 50 
    }, 
    cacheableResponse: {statuses: [0, 200]} 
}) 
); 

是否有可能JSON數據存儲在索引數據庫只和你如何定義它用針線攔截(添加,更新,刪除)?

回答

1

不,工作箱依靠Cache Storage API來存儲響應的主體。 (如您所見,它使用IndexedDB作爲一些帶外管家信息,如時間戳,用於緩存過期。)

如果使用Cache Storage API的方法不適合您的用例(很高興聽到爲什麼不呢?),那麼我建議直接更新IndexedDB,或許通過一個包裝庫(如idb-keyval)。

+0

如果使用INDEXDB背景同步和更新INDEXDB的JSON記錄使用離線模式,那麼它不應該能夠獲取來自INDEXDB最新在離線模式下? – seUser

+0

IndexedDB用於'workbox-background-sync'中用於存儲序列化的**請求**實體,而不是**響應**實體。我假設你正在討論存儲響應主體,並且使用Cache Storage API(這應該是最簡單的方法),或者需要滾動您自己的IndexedDB代碼。工作箱不提供幫助。 –

+0

謝謝!是否有理由不支持響應體,如果我最終使用我自己的IndexDb代碼做這件事,這是一個好習慣嗎? – seUser

1

您可以編寫一個自定義函數來執行提取並將信息存儲在indexedDB中,但這與其他工作單元無關,只能確保您僅獲取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. 
    } 
);