使用 Flask 和 PythonAnywhere 路由到 Service-Worker

Routing to a Service-Worker with Flask and PythonAnywhere

我是 Flask 的新手,正在构建我的第一个网络应用程序。当从本地主机 运行 时,我的服务工作者注册正常,但是当我将应用程序部署到 pythonanywhere 时。要构建它,请遵循 www.flaskpwa.com 上的过程。这是我得到的:

  1. 我的 sw.js 文件位于静态文件夹中。

  2. 我有一个服务 service worker js 文件的路由:

    @app.route('/sw.js') 定义开关(): return app.send_static_file('sw.js')

  3. 在我的 PythonAnywhere“Web”页面上,我有一个名为 /static/ 的静态文件路径指向静态文件夹。

  4. 我的 app.js 文件正在使用以下方式注册服务工作者:

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

加载我的网络应用程序时,我的控制台 return 出现以下两个错误:

获取脚本时收到错误的 HTTP 响应代码 (404)。

无法注册服务工作者。 TypeError:无法使用脚本 ('https://xxxxx.pythonanywhere.com/sw.js') 为范围 ('https://xxxxx.pythonanywhere.com/') 注册 ServiceWorker:获取脚本时收到错误的 HTTP 响应代码 (404)。

我很确定我的问题出在 Flask 路由上,因为我在尝试从浏览器指向 xxxxx.pythonanywhere.com/sw.js 时遇到相同的 404 错误。我一直在努力纠正这一点。

感谢您的意见。

如果您在尝试从浏览器访问 https://xxxxx.pythonanywhere.com/sw.js 时遇到 404 错误,那么这不是您的 Flask 路由——这是您的静态路由。如果您有一个静态文件映射,其中“URL”设置为 /static,那么它只会接收以 https://xxxxx.pythonanywhere.com/static.

开头的请求

如果您想专门为文件 sw.js 设置一个静态路由,并且您希望它可以从 https://xxxxx.pythonanywhere.com/sw.js 访问,那么您需要设置一个带有“ /sw.js 的 URL”,并将“目录”设置为文件的完整路径,例如 /home/xxxxx/mysite/static/sw.js

查看 the PythonAnywhere documentation for static files 了解更多详情。