Workbox кэширует только метки времени в indexDb, как перехватить данные json в indexDb?
Маршрут ниже определяет хранение данных json как MyCachedData в кеш-хранилище, а IndexDb хранит только URL и метку времени.
workboxSW.router.registerRoute('/MyApi(.*)',
workboxSW.strategies.staleWhileRevalidate({
cacheName: 'MyCachedData',
cacheExpiration: {
maxEntries: 50
},
cacheableResponse: {statuses: [0, 200]}
})
);
Можно ли хранить данные json только в индексной базе данных и как определить, что они должны перехватывать (добавлять, обновлять, удалять) с помощью Workbox?
2 ответа
Нет, Workbox использует Cache Storage API для хранения тел ответов. (Как вы заметили, он использует IndexedDB для некоторой внеполосной служебной информации, такой как метки времени, используемой для истечения срока действия кэша.)
Если подход, использующий Cache Storage API, не подходит для вашего случая использования (было бы неплохо услышать, почему бы и нет?), То я бы рекомендовал просто обновить IndexedDB напрямую, возможно, с помощью библиотеки-оболочки, такой как idb-keyval
,
Вы можете написать пользовательскую функцию, которая выполняет выборку и сохраняет информацию в indexedDB, но это будет отличаться от всего, что Workbox делает, кроме того, что вы получаете только запросы API.
Это не проверено, но что-то вроде:
workboxSW.router.registerRoute(
'/MyApi(.*)',
(event) => {
// TODO:
// 1. Check if entry if in indexedDB
// 1a. If it is then return new Response('<JSON Data from IndexedDB>');
// 1b. If not call fetch(event.request)
// Then parse fetch response, save to indexeddb
// Then return the response.
}
);