2017-09-03 1 views
0

Ich habe einen Servicemitarbeiter mit workbox 2.0.0 und für einige Seiten, ich bin mit dem workboxSW.strategies.staleWhileRevalidate() Caching-Strategie:Nachbearbeiten Seiteninhalt mit staleWhileRevalidate

const customFilter = { 

cachedResponseWillBeUsed: function (input) { 
    try { 
     console.log('cacheResponseWillBeUsed for : ' + input.request.url); 
     // modify the response body here 
    } catch (e) { 
     console.error(e); 
    } 

    return input.cachedResponse; 
}, 

requestWillFetch: function (input) { 
    try { 
     console.log('requestWillFetch for ' + input.request.url); 
    } catch (e) { 
     console.error(e); 
    } 

    return input.request; 
}, 

fetchDidFail: function (input) { 
    console.log('A fetch request for ' + input.request.url + ' failed.'); 
} 
} 

const cachingStrategy = workboxSW.strategies.staleWhileRevalidate({ 
    plugins: [ 
     customFilter 
    ] 
}); 

workboxSW.router.registerRoute(
    new RegExp('\/(.*)/suffix/?$'), 
    cachingStrategy 
); 

Das gut geht, und Ich kann On-the-Fly-Antworten aus dem Cache aktualisieren. Aber ich würde gerne ALLE Antworten ändern, auch wenn sie das erste Mal aus dem Netzwerk kommen (ich muss Javascript einfügen).

Von meinen Tests, cachedResponseWillBeUsed erlaubt nur die Nachbearbeitung der Antwort aus dem Cache (nach dem Methodennamen), aber ich habe noch keinen Weg gefunden, um Zugriff auf Netzwerkantworten zu erhalten (normalerweise die staleWhileRevididate-Strategie zu verwenden).

Irgendwelche Ratschläge?

Vielen Dank

Antwort

0

Sie richtig sind, dass es keine RequestWrapper Lifecycle-Ereignis, das erfolgreich zurückgegeben wird, um eine Netzwerkanforderung entspricht. (Wenn Sie möchten, um es sehen hinzugefügt, wie fetchDidSucceed oder etwas ähnliches, können Sie eine feature request öffnen!)

Sie können dieses Problem umgehen, indem Sie Ihre eigenen benutzerdefinierten Handler schreiben, die strategies.staleWhileRevalidate genannt und dann mit der tat etwas Antwort vor der Rückgabe, wie folgt:

+0

Das ist genau das, was ich getan habe (obwohl es ein bisschen Zeit brauchte, um herauszufinden). – Weeblr

+0

Entschuldigung, drücken Sie die Eingabetaste zu schnell. Es stellte sich heraus, dass es keine so gute Idee war, cachedResponseWillBeUsed zu verwenden, um die Antwort zu modifizieren. Wenn Sie dies tun, können Sie die cacheExpiration-Optionen von WorkBox nicht mehr verwenden, da Sie nur eine cachedResponseWillBeUsed-Methode registrieren können. Eine dedizierte Methode zum Filtern der Antwort wäre also eine gute Idee. – Weeblr