【问题标题】:return request as response in fetchEvent在 fetchEvent 中返回请求作为响应
【发布时间】:2018-10-19 12:30:55
【问题描述】:

在服务工作者内部,如果请求失败,我会尝试将发出的请求作为响应返回。看起来很简单,但是行不通。

事实上,当我尝试返回它时,它返回一个空对象,即使是.clone()

代码如下:

fetch(event.request.clone())
      .catch((err) => {
        queue.addRequest(event.request)
        return new Response(JSON.stringify({ deferred: true, ...event.request }), {
          headers: new Headers({ "Content-Type": "application/json" })
        })
      })

它的响应总是:{ deferred: true }。仅此而已。

有可能吗?

【问题讨论】:

  • 你能说明你在哪里调用这个函数吗?什么是事件请求?
  • 我打电话给:self.addEventListener('fetch', (event) => { ... })
  • 是否需要两次请求数据?
  • 请求没有两次发送到服务器。 service-worker 就像一个代理。这里我只是处理中间的请求。
  • self 是 serviceWorkerGlobalContext(未围绕此代码声明,这是一个关键字),而 queue 是一个 Workbox(用于服务工作者的 Google 库)类。这无助于回答。这是关于请求类的全部内容:developer.mozilla.org/en-US/docs/Web/API/Request

标签: javascript fetch service-worker fetch-api


【解决方案1】:

我刚刚找到了获取请求正文并将其返回的方法。

可以使用.json() 获取它,该.json() 返回带有请求正文的承诺。

看起来像这样:

fetch(event.request.clone())
      .catch((err) => {
        queue.addRequest(event.request)
        return event.request.clone().json().then((requestBody) => {
          return new Response(JSON.stringify({ deferred: true, ...requestBody }), {
            headers: new Headers({ "Content-Type": "application/json" })
          })
        })
      })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2017-10-10
    • 2019-06-26
    • 2022-07-27
    • 1970-01-01
    • 2010-09-21
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多