【发布时间】:2020-09-12 10:45:03
【问题描述】:
如何在 Service Worker 中捕获 POST 请求的主体。我在 POST 请求中发送身份验证参数,所以我想拦截服务工作者中的获取请求并显示来自 IndexDB 的结果。 以下是我的服务人员的代码
self.addEventListener("fetch", event => {
let cloned = event.request.clone();
console.log(cloned.json()); //<<- This line returns error : TypeError: Failed to execute 'json' on 'Request': body stream is locked
let response = new Promise((resolve)=>{
let key='mykey'; //Genereate from body, so read body
let stored = localforage.getItem(key);
if(stored){
resolve(stored);
}else{
resolve(fetch(cloned).then(res => res.json()).then(res=>{
localforage.setItem(key,res);
}));
}
})
event.respondWith(response);
})
p.s : 如果有语法错误,请忽略。
【问题讨论】:
-
确实应该有一个 JavaScript 设置:“ps_please_ignore_syntax_errors_if_any”!那会让生活变得更轻松! :D ;-)
-
你解决了吗?捕获 formData 还是 Body?
-
是的,请求是一个流,因为数据仍在到达服务工作者,您可以捕获数据 request.body.json() , request.body.formData() 给出参数确定在承诺下使用它。我将很快分享完整的代码来回答这个问题。