当前位置: 首页 > 知识库问答 >
问题:

部署后,服务工作者不会在脱机模式下从缓存获取api响应

秦才英
2023-03-14

使用localhost,PWA服务工作人员在所有场景中都可以正常工作,但在部署(在带有GIT管道的Azure服务器上)后,在联机模式下,所有工作都可以正常工作:1。服务人员已注册。2.缓存API响应。现在,当我脱机时,服务工作者仍然尝试从网络获取api响应(由于处于脱机模式,所以给出504错误),而不是从缓存获取这些响应。我可以在缓存中看到数据,但问题是ServiceWorker仍然只尝试从网络中获取数据,即使是在脱机模式下。

ngsw-config.json
{
  "$schema": "./node_modules/@angular/service-worker/config/schema.json",
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/favicon.ico",
          "/index.html",
          "/manifest.webmanifest",
          "/*.css",
          "/*.js"
        ],
        "urls": [
          "https://fonts.googleapis.com/css?family=Roboto:400,700",
          "https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap",
          "https://fonts.gstatic.com/s/",
          "https://fonts.googleapis.com/icon?family=Material+Icons",
          "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css"          
        ]
      }
    },
    {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/**",
          "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
        ]
      }
    }
  ],
  "dataGroups": [
    {
      "name": "api-performance",
      "urls": [
        "https://api***************.com/fuzzy",
        "https://api*********************.com/kdks"
      ],
      "cacheConfig": {
        "strategy": "performance",
        "maxSize": 100,
        "maxAge": "3d"
      }
    },
    {
      "name": "api-freshness",
      "urls": [
        "https://pwa***********************.com/TS_LIST",
        "https://ap***********************.com/ores/",
        "https://as*************************.com/ands/"
      ],
      "cacheConfig": {
        "strategy": "freshness",
        "maxSize": 200,
        "maxAge": "1h",
        "timeout": "10s"
      }
    }
  ]
}

对于部署构建,我运行以下命令:

ng build --prod

然后,在dist文件夹中生成的构建文件被推送到部署分支中的GIT回购,从那里通过git管道自动部署到Azure服务器。一些GIT的答案建议删除"$schema"标签从ngsw-config.json文件,我已经尝试了,但问题仍然存在。请帮助。提前感谢。

共有1个答案

陈翰林
2023-03-14

我面临的问题是,在Azure上部署后,服务工作者在脱机模式下无法从缓存获取api响应,并且创建的清单在部署的版本中显示错误,而在localhost中,所有这些都工作正常。我的主要问题是:默认情况下,IIS不提供任何在其(IIS)核心设置中没有与之关联的MIME映射的文件。为了应对这一挑战,您需要绘制地图。webmanifest文件扩展名为其相应的MIME类型。为此,您需要将以下内容添加到web。配置文件:

        <staticContent>
            <mimeMap fileExtension=".json" mimeType="application/json" />
            <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
        </staticContent>

这有助于azure理解我们的清单。webmanifest文件,否则它将无法访问该文件。在此之后,它能够检测到清单。webmanifest文件解决了我的这两个问题,在脱机模式下从缓存获取响应,现在我的Angular PWA应用程序可以使用应用程序图标和所有其他功能安装。许多其他GIThub的答案都建议更改清单文件中的scope和start_url参数,但我保留了默认设置

In manifest.webmanifest
"scope": "./",
"start_url": "./",

我的网站的完整代码仅供参考。配置文件是

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Redirect to https" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
                </rule>
                <rule name="AngularJS Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
        <staticContent>
            <mimeMap fileExtension=".json" mimeType="application/json" />
            <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
        </staticContent>
    </system.webServer>
</configuration>
 类似资料:
  • 我们正在进行灾难恢复练习,一些Hibernate Spring应用程序没有出现以下错误 hbm映射XML文件已被删除 在SO和Hibernate论坛上搜索修复程序看起来需要在doctype to SYSTEM中创建DTD,以便它从本地系统而不是sourceforge上托管的公共DTD读取。网 但是Hibernate正在查找appserver根文件夹上的文件 如何指定系统DTD引用,以便Hibern

  • 因此,清单已被弃用,试图在express web应用程序中实现服务工作者。这是我的项目结构: 在我的express应用程序中,我使用的公用文件夹如下: 登录。呈现的ejs模板 注册成功。 和西南部。js 安装 当同一个应用程序重新加载或页面导航时,读取不会触发,也不会从服务工作者加载数据,总是从服务器加载。 但是当我尝试在不同的浏览器选项卡中使用例如:从服务人员的提取中加载。 当我研究时,我了解了

  • 我的github回购的链接如下:https://github.com/noumanmalik960/quiz-app-pwa 这里是Service Worker文件代码:

  • 问题内容: 我希望能够创建一个自定义AngularJS服务,该服务在其数据对象为空时发出HTTP“获取”请求,并在成功时填充该数据对象。 下次调用此服务时,我想绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。 这可能吗? 问题答案: Angular的$ http 内置了一个缓存。根据文档: cache – {boolean | Object} – 用$ cacheFactory创建的布尔值

  • 我正在使用Service Worker创建一个渐进式Web应用程序,我正在使用Service Worker工具箱来缓存我的内容。Service Worker代码来缓存我的内容: 代码运行正常,因为我在控制台上没有看到任何错误。但是我如何检查是否从云前或上面配置的网址的图像正在缓存和从缓存本身渲染。

  • 我建立了一个进步的网络应用,https://www.tavest.com.我不明白为什么我的服务人员也被缓存在Chrome中?https://www.tavest.com/service-worker-tavest.js因此,当我更改服务人员时,chrome没有检测到更改,因此服务人员没有更新。 尽管我刷新了很多次页面,它仍然是一样的。然而,在Mozilla中,它工作得很好。这是我安装服务人员的代