Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 服务人员错误处理应用程序引擎上的用户登录_Google App Engine_Caching_Service Worker_Google App Engine Python - Fatal编程技术网

Google app engine 服务人员错误处理应用程序引擎上的用户登录

Google app engine 服务人员错误处理应用程序引擎上的用户登录,google-app-engine,caching,service-worker,google-app-engine-python,Google App Engine,Caching,Service Worker,Google App Engine Python,我的服务人员和我的谷歌应用程序引擎应用程序有一个特别的问题。服务人员可以完美地安装和激活。此外,我在另一个应用程序中使用了完全相同的服务人员(不需要任何用户登录),它运行良好。但是,在我当前的应用程序中,只有一个页面(应用程序引擎呈现该页面,并使用内置用户API在成功登录时发送该页面)。我的问题是,我不希望缓存根地址,即来自服务器的呈现页面。以下是我要缓存的文件阵列: var filesToCache = ['/manifest.json','/js/app.js','/js/jquery-3.

我的服务人员和我的谷歌应用程序引擎应用程序有一个特别的问题。服务人员可以完美地安装和激活。此外,我在另一个应用程序中使用了完全相同的服务人员(不需要任何用户登录),它运行良好。但是,在我当前的应用程序中,只有一个页面(应用程序引擎呈现该页面,并使用内置用户API在成功登录时发送该页面)。我的问题是,我不希望缓存根地址,即来自服务器的呈现页面。以下是我要缓存的文件阵列:

var filesToCache = ['/manifest.json','/js/app.js','/js/jquery-3.js','/js/jquery.matchHeight.js','/js/materialize2.min.js','/js/vue.js','/js/vuex.min.js','/js/chart.js','/css/materialize.min.css','/css/style.css', '/images/case.jpg'];
正如您所看到的,我只是试图缓存脚本,因为HTML必须呈现在服务器端,而且它非常紧凑,所以我不介意发出小的网络请求。这是我的服务人员,它位于根文件夹中

self.addEventListener('install', function(e) {
  console.log('[ServiceWorker] Install');
  e.waitUntil(
    caches.open(cacheName)
    .then(function(cache) {
      console.log('[ServiceWorker] Caching app shell');
      return cache.addAll(filesToCache);
    })
    .catch(function(e) {
      console.error(e);
    })
  );
});

self.addEventListener('activate', function(e) {
  console.log('[ServiceWorker] Activate');
  e.waitUntil(
    caches.keys().then(function(keyList) {
      return Promise.all(keyList.map(function(key) {
        if (key !== cacheName) {
          console.log('[ServiceWorker] Removing old cache', key);
          return caches.delete(key);
        }
      }));
    })
  );
});

self.addEventListener('fetch', function(e) {
  console.log('[ServiceWorker] Fetch')
  e.respondWith(
    caches.match(e.request)
      .then(function(response) {
        return response || fetch(e.request)
      })
  );
});
问题是,尽管我没有尝试缓存根地址,但服务工作者将尝试返回响应,而不是用户初始尝试的获取。这是用户导航到应用程序后的事件序列:

1-带有“登录谷歌”按钮的登录页

2-成功登录后重定向到应用程序

预期结果:用户被重定向到谷歌自己的解决方案,之后,该用户将被重定向回完全登录的我的应用程序

实际结果:服务工作者拦截请求,提供未定义的响应,无限期地将用户重定向回登录页面

我对服务人员来说是个新手,所以可能在拦截响应和一些边缘案例中缺少了一些东西,但我不确定这是什么。我尝试拆分return语句以首先检查是否有响应,因此如果响应未定义,它将跳过return-response语句,克隆事件,然后在fetch请求中返回事件请求。然而,我得到了完全相同的结果

以前有没有人遇到过这个问题,或者知道该怎么办?我花了昨天的时间在这个问题上,但没有任何结果,只是放弃了回复,从网络上提供一切服务,但我真的很想解决它。提前谢谢你的帮助

贴出一句话:“我对根目录(/)也有同样的问题,根目录会根据后端检查重定向到两个不同的页面。一旦serviceWorker缓存了一个状态,就不可能进入下一个状态。此外,google现在要求缓存根目录,否则将来就无法安装。”