【问题标题】:Angular PWA Service Worker not calling localhost server on offline modeAngular PWA Service Worker 不在离线模式下调用本地主机服务器
【发布时间】:2020-10-27 15:02:06
【问题描述】:

我正在开发一个使用 Angular 和 PWA 的项目,在此服务器上运行:

http://localhost:8080/heroes

我在另一台服务器上有一个 mongodb api:

http://localhost:3000/heroes

如您所见,URL 相同,但端口不同,在线时可以正常工作。但是当我切换到离线时,我希望它能够继续工作,因为服务器 api mongo 是 localhost,但它给了我这个错误:

{
  "headers": {
    "normalizedNames": {},
    "lazyUpdate": null,
    "headers": {}
  },
  "status": 504,
  "statusText": "Gateway Timeout",
  "url": "http://localhost:3000/heroes",
  "ok": false,
  "name": "HttpErrorResponse",
  "message": "Http failure response for http://localhost:3000/heroes: 504 Gateway Timeout",
  "error": null
}

也许在另一条路线上运行mongodb会起作用,我不知道,谢谢大家。


我将我的项目 angular pwa 添加到免费服务器以进行测试“heroes1234.000webhostapp.com”,在主页部分您可以测试 jsons api 获取,它适用于我的 localhost:3000/heroes,在网上很好,但不工作在离线模式下。谢谢

【问题讨论】:

  • 使用 HTTPS URL 运行时,您的 PWA 是否通过 Chrome Lighthouse 工具作为有效的 PWA 传递?如果有问题,它通常会给出很好的提示。
  • 它工作正常,我将我的项目测试升级到一个网址供您观看。看:角度 pwa:heroes1234.000webhostapp.com/home
  • 所以当我尝试像这样从 api url 调用和 json 时-heroes1234.000webhostapp.com 它可以工作,但是当我尝试调用我的本地数据库时,mongo 可以工作,但只能在 ONLINE 中工作,我希望它可以工作离线,这就是我使用离线的原因,localhost:3000/heroes
  • HTTPS 是 PWA 要求
  • Localhost 被认为是“安全的”,因此在本地开发时无需使用 HTTPS。这个问题似乎更多地与 SW 不知道哪些 HTTP GET 调用缓存的事实有关。

标签: angular mongodb server progressive-web-apps


【解决方案1】:

您如何定义要缓存在ngsw.config.json 文件中的URL? 如果要缓存数据请求(使用性能或新鲜度策略),则应在“dataGroups”数组中定义目标 URL,如下例所示:

"dataGroups": [
{
  "name": "jokes-cache",
  "urls": [
    "/icanhazdadjoke.com"
  ],
  "cacheConfig": {
    "strategy": "performance",
    "maxSize": 5,
    "maxAge": "15m"
  }
}

我写了一个article on how to create a PWA with angular,缓存静态资产和网络调用,以防你想深入话题。

【讨论】:

  • 但我不想缓存 url,我希望在离线模式下,我可以向 localhost 服务器发出请求,这可能吗?
  • 如果不在缓存中,您的软件如何在离线时提供一些数据?这不是 PWA 的工作方式。您需要在本地缓存静态资产或数据请求(客户端发送请求)。然后一旦离线,SW 会拦截应用程序请求并在缓存中本地可用的情况下传递数据。
猜你喜欢
  • 2017-08-22
  • 2019-09-15
  • 2019-07-05
  • 2018-08-13
  • 2020-02-09
  • 2017-07-06
  • 1970-01-01
  • 2018-02-05
  • 2020-08-25
相关资源
最近更新 更多