【问题标题】:How Can I use POST http method with Service Worker?如何在 Service Worker 中使用 POST http 方法?
【发布时间】:2016-06-14 12:16:29
【问题描述】:
我在 Service Worker 的 fetch 中使用这个命令
if (event.request.method =='POST') {
event.respondWith(fetch(event.request,{method: 'post'}));
return;
}
但我收到此错误:
未捕获(承诺中)类型错误:无法在“ServiceWorkerGlobalScope”上执行“获取”:无法使用模式为“导航”且非空 RequestInit 的请求构造请求。
我该怎么办?
【问题讨论】:
标签:
javascript
service-worker
【解决方案1】:
根据您提供的示例代码,当您为 POST 请求处理 fetch 事件时,您似乎只想实现默认的假装没有服务工作人员行为。
最简单的方法是一开始就不要打电话给event.respondWith()。调用event.respondWith() 是可选的,如果你不在fetch 处理程序中调用它,服务工作者将寻找任何其他已注册的fetch 处理程序并给他们一个响应的机会。
如果没有任何fetch 事件处理程序响应,则请求将通过浏览器缓存(取决于请求标头和缓存的状态)或网络来完成,就像没有服务工作者参与一样.
如果出于某种原因,您确实需要调用 `event.respondWith(),但又想模仿默认行为,则使用
event.respondWith(fetch(event.request));
应该可以工作,即省略 {method: 'post'} 位。 event.request 已经知道它是 POST,因此无需将其他任何内容传递给 fetch() 即可告诉它。