2016-11-15 6 views
0

Я использую Cache Storage для создания прогрессивного веб-приложения (PWA). В мой кеш есть пользовательский объект, который мне нужен put, но кеш принимает объекты Response в качестве аргумента. Поэтому мой вопрос заключается в том, как правильно создать объект Response, в котором есть JSON. Я знаю, что могу использовать другие стратегии кэширования (localStorage или IndexedDB), но мне особенно интересно это дело - сохранение пользовательского JSON в кеше в качестве запроса.Fetch API - создать ответ с пользовательским JSON в нем

var myJSON = JSON.stringify({custom:"object"}); 
caches.open('cache-name').then(function (cache) { 
    var response = new Response(); //My JSON should go into this Response obj. 
    return cache.put('cache-name', response); 
}); 
+2

Cache Storage предназначено для использования в сервисных работников. Ваш сотрудник службы перехватит запрос на выборку, найдет совпадение в кеше и вернет совпадение, если оно будет найдено. Поэтому кэш берет объект «Response». Ваш вопрос, похоже, пытается использовать кеш в качестве хранилища общего назначения. Это правда? Если это так, не используйте Cache Storage. В противном случае, если кеш действительно предназначен для рабочего, ваш ответ JSON должен быть в файле (тот, который запросит клиент), и этот файл должен быть добавлен в кеш при установке рабочего. – tony19

+0

Привет, спасибо за ответ. Я как бы пытаюсь использовать его как хранилище общего назначения - моя идея - изменить JSON и поместить его в магазин. Если у пользователя нет подключения к Интернету, рабочий службы вернет измененный JSON из хранилища, и приложение будет отображать с помощью этого модифицированного JSON. пока я использую localStorage, чтобы сохранить модификацию и онлайн-первую стратегию кэширования с рабочим сервисом, и она отлично работает. Но я начал задаваться вопросом, как можно использовать кеши в качестве общего хранилища для модифицированных URL-адресов. –

ответ

3

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

const data = { 
    1: 2, 
    3: 4 
}; 

const jsonResponse = new Response(JSON.stringify(data), { 
    headers: { 
    'content-type': 'application/json' 
    } 
}); 

caches.open('json-cache').then(cache => cache.put('/data.json', jsonResponse)); 

Вы можете вручную подтвердить, что данные, которые вы ожидаете в настоящее время хранятся с помощью входа что-то вроде

caches.match('/data.json').then(r => r.json()).then(console.log)