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

f.c*_*f.c 4 offline node.js express service-worker progressive-web-apps

我正在创建一个渐进式Web应用程序(pwa),并尝试注册服务工作者以测试脱机功能。文件夹结构如下:

-- views 
   -- index.pug
-- sw.js
-- public
   -- js
      -- main.js
-- index.js
Run Code Online (Sandbox Code Playgroud)

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);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

404错误始终在本地主机中弹出,并且我不知道为什么会部署该URL,如何解决呢?

ServiceWorker registration failed:  TypeError: Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script.
Run Code Online (Sandbox Code Playgroud)

谢谢

解决方案(更新)-

app.use('/', routes)将service-worker文件或其中的任何位置包括在index.js文件中。

Mud*_*avi 5

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

navigator.serviceWorker.register('ScriptsFolder/subFolder/sw.js')
Run Code Online (Sandbox Code Playgroud)