Я не могу понять, почему Workbox не извлекает данные из кэша, когда сеть отключена для одного маршрута, а работает для всех остальных? - PullRequest
0 голосов
/ 08 июня 2019

Я использую workbox-webpack-plugin, и я успешно настроил своего сервисного работника, так как он кэширует изображения, css, js и большинство моих ответов API в разных кешах на угловом внешнем интерфейсе и на стороне Python

Существует один маршрут, который никогда не извлекает ответ API должным образом из кэша. Я продолжаю получать сообщение об ошибке

Uncaught (in promise) no-response: The strategy could not generate a response for 'http://127.0.0.1:8080/challenges/?is_exclusive=false&is_published=true&consolidate_groups_with_location=true&groups=9413,9404,9413&location_scope=-1&location_continent_id=5&location_country_id=235&location_state_province_id=44&location_region_id=194&location_city_id=14009&ends_at=2019-06-07%2020:54:38'. The underlying error is TypeError: Failed to fetch.
at StaleWhileRevalidate.makeRequest (https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-strategies.dev.js:1005:15)

Ответ API для этой страницы хранится в кэш-памяти и содержит информацию, необходимую для визуализации информации. Все мои другие страницы работают, и я не могу понять, почему. Я также не знаю, что мне нужно сделать, чтобы устранить эту ошибку.

Я пытался использовать этот код, но слушатель события, похоже, не срабатывает.

self.addEventListener('fetch', function(event) {
event.respondWith(
  caches.match(event.request)
    .then(function(response) {
      if (response) {
        return response;     // if valid response is found in cache return it
      } else {
        return fetch(event.request)     //fetch from internet
          .then(function(res) {
            return caches.open("api-local-cache")
              .then(function(cache) {
                cache.put(event.request.url, res.clone());    //save the response for future
                return res;   // return the fetched data
              })
          })
          .catch(function(err) {       // fallback mechanism
            return caches.open('api-local-cache')
              .then(function(cache) {
                return cache.match('/users/me');
              });
          });
      }
    })
);

}); * +1011 *

это моя рабочая стратегия

workbox.routing.registerRoute(
     new RegExp('http://127.0.0.1:8080'),
     new workbox.strategies.StaleWhileRevalidate({
      cacheName: "api-local-cache"
    })
  );

Я ожидаю, что мой сервисный работник получит сохраненный ответ API, но он не получает и сообщает, что не смог получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...