如何从服务工作者的indexedDB中检索数据?

时间:2017-06-15 11:09:54

标签: javascript caching indexeddb service-worker fetch-api

我已经在indexedDB中存储了json数据,并希望在应用程序在服务工作者中请求它时检索它,但是我收到一条错误,指出错误为服务工作者提取脚本。 我的服务工作者代码是这样的:

importScripts('idb.js');
const cache_v = 'a2',
cache_all = [
'shell_'+cache_v,
'data_'+cache_v
],

statics = [
'index.html',
'app.js',
'idb.js'
];


this.addEventListener('install',e=>{
  console.log("Installing Service Worker");
  console.log("Storing Static Data");
  e.waitUntil(
    caches.open(cache_all[0])
    .then(cac=>cac.addAll(statics))
    .catch(er=>console.error(er))
  )
  console.log("Installation Complete");
});

this.addEventListener('activate',e=>{
  console.log("Service worker activated, now clearing obsolete data");
})

this.addEventListener('fetch',e=>{
    if(e.request.url === 'https://api.github.com/users/abt10/repos'){
       console.log("IndexDB Reqrd");
       let db = idb.open('Projects_info')
       .then(d=>{
        let ob = d.transaction('proj_dat');
        let data = ob.objectStore('proj_dat');
        let fd = data.getAll()
        .then(dt=>{
            return dt;
        })
    })
}
else{
    e.respondWith(caches.match(e.request)
    .then((res)=>{
        return res || fetch(e.request).then(res=>{if(res.status === 404)  
        return new Response("Not Found");});
    })
    )
}
console.log('fetched');
})

我无法找到错误。

1 个答案:

答案 0 :(得分:0)

我的猜测是你需要从网站的根目录中正确地输入你的idb.js参考。例如:

importScripts('/js/idb.js');