Положите «ручной» ответ в кеш - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь добавить некоторые автономные возможности в мое веб-приложение.При определенных обстоятельствах я хочу получить данные из запроса / ответа в кеше, изменить их и добавить обратно в кеш в качестве новой пары запрос / ответ.

До сих пор я был в состоянии получить данные из кэша и изменить их, но когда я помещаю их в кэш, я получаю пустую запись в кэше (Content-Length: 0). РЕДАКТИРОВАТЬ: На самом деле, инструменты разработчика Chrome показывают, на панели предварительного просмотра, правильный объект, но в списке записей кэша он говорит "Content-Length: 0" и "Time Cached: 01.01.1970 0: 59: 59 ".

И затем, при попытке извлечь его снова из кэша, я получаю сообщение об отсутствии совпадения, и cache.match () возвращает неопределенное значение.

Эточто у меня пока так:

return caches.open(CACHE_NAME).then(function(cache) {
    return cache.matchAll().then(function(responses) {
        var resp = responses[0].clone();
        return resp.clone().json().then(function (datosResp) {

            var nuevaMed = nuevaMedicionDesdeMedicion(datosResp);
            var urlACachear = new URL('obra/' + nuevaMed.obraId + '/mediciones/' + nuevaMed.id, urlBase);

            var nuevaMedJSON = JSON.stringify(nuevaMed);
            var blob1 = new Blob([nuevaMedJSON], { type: "application/json;charset=utf-8" });
            var myHeaders = new Headers(resp.headers);

            var resACachear = new Response(blob1, { "status": 200, myHeaders });

            return cache.put(urlACachear, resACachear.clone()).then(function() {
                // Whatever...
            });
        });
    });
});

Есть идеи как это сделать?Можно ли даже хранить и корректно извлекать мои собственные запросы и ответы?

1 Ответ

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

Time Cached: 1/1/1970 0:59:59 - это известная ошибка в Chrome DevTools .Я мог бы предположить, что Content-Length: 0 - это та же ошибка.

То, что вы описываете, звучит так, как будто ваш новый Response правильно записывается в кэш, но что-то не так с вашим вызовом match()это мешает вам найти кэшированную запись.

Для быстрой проверки работоспособности вы можете запустить следующий код в консоли JS, чтобы получить список всех URL-адресов, используемых в качестве ключей в вашем кэше CACHE_NAME.Убедитесь, что вы видите распечатанные URL-адреса, которые вы ожидаете кэшировать, а затем явно попробуйте выполнить match(), используя один из этих URL-адресов.

const cache = await caches.open(CACHE_NAME);
const requests = await cache.keys();
const urls = requests.map(request => request.url);
console.log(urls):
...