Настройте Workbox для использования кэшированного ответа, когда сетевой ответ 404 - PullRequest
0 голосов
/ 08 июня 2018

Этот вопрос был первоначально задан в твите .

Есть ли способ настроить Workbox для ответа с кэшированным ответом, когдаответ сети имеет статус HTTP 404?

1 Ответ

0 голосов
/ 08 июня 2018

Да, вы можете создать свой собственный handlerCallback, который выполняет это.Некоторые детали могут различаться в зависимости от вашей конкретной настройки (имена кэша, резервные URL-адреса и т. Д.), А также от того, хотите ли вы использовать формальную стратегию Workbox (например, networkFirst вместо fetch()), но вВ общем, должно работать следующее:

// Assume that this URL is already cached somewhere, e.g. precached.
const fallbackUrl = '/404-fallback.html';

const notFoundFallbackHandler = async ({event}) => {
  const fetchResponse = await fetch(event.request);
  if (fetchResponse.status === 404) {
    return caches.match(fallbackUrl);
  } else {
    return fetchResponse;
  }
};

// To apply this handler based on a URL pattern:
workbox.routing.registerRoute(
  new RegExp('/some/criteria/to/match'),
  notFoundFallbackHandler
);

// Or, to apply this handler for all navigation requests, use this:
// const navigationRoute = new workbox.routing.NavigationRoute(notFoundFallbackHandler);
// workbox.routing.registerRoute(navigationRoute);
...