无法注册ServiceWorker:获取脚本时收到错误的HTTP响应代码(404)

时间:2017-07-22 00:35:41

标签: node.js express offline service-worker progressive-web-apps

我正在创建一个渐进式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文件中。

2 个答案:

答案 0 :(得分:4)

您可以使用完整的URL路径进行注册,例如:

navigator.serviceWorker.register('ScriptsFolder/subFolder/sw.js')

答案 1 :(得分:0)

我发现启动Node.js服务工作者时解决TypeError问题的唯一方法是将服务工作者脚本放置在应用程序的根目录中,在我的情况下是我的Amazon EC2 Web服务器的根目录。

希望该错误消息更具描述性,TypeError并不是非常有用。但是此修复程序对我有用。