我正在创建一个渐进式Web应用程序(pwa)并尝试注册服务工作者以测试脱机功能。文件夹结构如下所示:
-- views
-- index.pug
-- sw.js
-- public
-- js
-- main.js
-- index.js
index.js文件是服务器文件,main.js是每个.pug文件中链接的文件。我嵌入了服务工作者注册码,代码如下:
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('./sw.js').then(function(registration) {
// Registration was successful
console.log('Service Worker registration successful with scope: ', registration.scope);
// console.log('Service Worker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
404错误一直在localhost中弹出已部署的URL,我不知道为什么,如何解决这个问题?
ServiceWorker registration failed: TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.
由于
解决方案(更新) -
将app.use('/', routes)
或service-worker文件放在index.js文件中。
答案 0 :(得分:4)
您可以使用完整的URL路径进行注册,例如:
navigator.serviceWorker.register('ScriptsFolder/subFolder/sw.js')
答案 1 :(得分:0)
我发现启动Node.js服务工作者时解决TypeError问题的唯一方法是将服务工作者脚本放置在应用程序的根目录中,在我的情况下是我的Amazon EC2 Web服务器的根目录。
希望该错误消息更具描述性,TypeError并不是非常有用。但是此修复程序对我有用。