如何在Service Worker中使用POST http方法?

时间:2016-06-14 12:16:29

标签: javascript service-worker

我在Service Worker

中的fetch中使用此命令
 if (event.request.method =='POST') {

        event.respondWith(fetch(event.request,{method: 'post'}));
        return;
    }

但是我收到了这个错误:

未捕获(承诺)TypeError:无法在'ServiceWorkerGlobalScope'上执行'fetch':无法使用模式为'navigate'且非空RequestInit的请求构造请求。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

根据您提供的示例代码,当您处理fetch事件时,您似乎只想实现默认的,假装时那样的服务工作者行为POST请求。

最简单的方法是首先不要调用event.respondWith()。调用event.respondWith()是可选的,如果您不在fetch处理程序中调用它,服务工作者将查找任何其他已注册的fetch处理程序,并让他们有机会回复

如果fetch事件处理程序都没有响应,那么请求将通过浏览器缓存(取决于请求标头和缓存状态)或网络来完成,就像没有服务一样工人参与。

如果出于某种原因,你真的需要调用`event.respondWith(),但是你想模仿默认行为,那么使用

event.respondWith(fetch(event.request));

应该有效,即省略{method: 'post'}位。 event.request已经知道它是POST,所以没有必要将其他任何内容传递给fetch(),以便告诉它。