0

以下のルートでは、jsonデータをMyCachedDataとしてキャッシュ記憶域に格納するように定義されており、IndexDbにはURLとタイムスタンプのみが格納されます。 WorkboxはindexDbにタイムスタンプだけをキャッシュしています、indexDbのjsonデータを傍受する方法は?

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

はそれだけで、あなたはそれが仕事箱を使用して(追加、更新、削除)傍受する方法を定義することができdbのインデックスにJSONデータを保存することは可能ですか?

答えて

1

いいえ、ワークボックスはCache Storage APIに応答の本体を格納します。 (あなたが見てきたように、キャッシュ期限切れに使用される、タイムスタンプのようないくつかのアウトオブバンドハウスキーピング情報にIndexedDBを使用します)。

キャッシュストレージAPIを使用するアプローチが、 (なぜそうではないのですか?)、おそらくidb-keyvalのようなラッパーライブラリを介してIndexedDBを直接更新することをお勧めします。

+0

が、indexDbから最新のを取得できないようにする必要がありオフラインモードでは? – seUser

+0

IndexedDBは 'workbox-background-sync'の中で、** response **ボディではなく**シリアライズされた**リクエスト**ボディを格納するために使用されます。私はあなたがレスポンス本体を格納することを話していると思いますし、Cache Storage API(最も簡単な方法です)を使用するか、独自のIndexedDBコードを使用する必要があります。ワークボックスはそれを行うヘルパーを提供しません。 –

+0

ありがとう!私は自分自身のIndexDbコードを使ってそれをやり終えるとよい反応がありますか? – seUser

1

フェッチを実行して情報をindexedDBに保存するカスタム関数を書くことができますが、これはWorkboxがAPIリクエストを取得するだけであることを除いて別のものになります。

これはテストされていませんが、のようなもの:あなたは、バックグラウンド同期のためのIndexDbを使用し、オフラインモードを使用してindexDbでJSONレコードを更新した場合

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. 
    } 
); 
関連する問題