我有一个网址/users/sign_out
,应该注销用户并将其重定向到我的根网址/
。我想通过我的服务工作者来处理这个提取,因为我想在将用户发送回root之前清除缓存中的一些项目。但是,由于客户端看不到服务工作人员提取时发生的重定向,因此用户会在我的初始屏幕上结束,但会看到重定向前地址/users/sign_out
。
目前有什么方法可以处理抓取并允许客户端查看正确的最终网址吗?
看来最终将会有一个Response.redirect()
方法,允许使用最终网址更新回复。看起来似乎也有某种finalURL
选项也可以解决这种情况。但是我现在可以使用什么吗?在Twitter上,Jake Archibald(@jaffathecake)表示我可以自己构建一个新的响应 - 我可以,但即使在查看规范和MDN文档之后,我仍然无法弄清楚如何指定正确的URL它
如果实际上有一种方法可以构建一个能够满足我需要的Response对象,那么有人可以告诉我它是如何工作的吗?
答案 0 :(得分:2)
https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/mock-responses上有一个示例,展示了如何创建Response
对象并使用它来响应fetch
事件。
在这种情况下,我们会通过正文创建200 OK
响应,但没有什么可以阻止您创建任意响应。您可能需要302 Found
用于您的用例,因此您可以执行以下操作:
var responseInit = {
status: 302,
statusText: 'Found',
headers: {
Location: '/' // Or whatever URL you want to redirect to.
}
};
var redirectResponse = new Response('', responseInit);
event.respondWith(redirectResponse);
您可以在回复此事件之前添加清除fetch
处理程序中的缓存的代码,并且您显然希望首先检查event.request.url
值,以确保只响应使用您的自定义回复请求/users/sign_out
。