0

所以我正在测试一个 cloudflare web worker 脚本,我似乎无法让我的代码处理 POST 请求等。

url_without_query_strings = request.url.split('?')[0] //remove all query strings

    const response = await fetch(url_without_query_strings, {
      method: request.method,
      headers: request.headers
    })
    return response

谁能看到我做错了什么?

4

1 回答 1

4

问题是您只是从请求中复制method和复制headers,但它具有比这更多的属性。例如,POST 请求具有body您的代码未复制的属性。

为了执行从原始请求中继承除 URL 之外的所有内容的 fetch,请执行以下操作:

const response = await fetch(url_without_query_strings, request)

也就是说,将request自身作为第二个参数传递,而不是 dict。这是有效的,因为请求对象的属性名称与fetch()第二个参数期望的所有选项完全匹配。

请注意,如果您想修改 URL 以外的任何请求属性,但保持其他属性不变,那么您必须将请求作为第一个参数传递,并在第二个参数中指定修改:

const response = await fetch(request, {headers: myHeaders})

这意味着如果你想修改 URL其他一些属性,你需要执行两个步骤——首先创建一个Request更改 URL 的新对象,然后修改标题:

let request2 = new Request(newUrl, request)
const response = await fetch(request2, {headers: myHeaders})

或者,当然,您可以执行相反的顺序:

let request2 = new Request(request, {headers: myHeaders})
const response = await fetch(newUrl, request2)

或者,对于标头的特定情况,您可以利用这样一个事实,即一旦您构建了自己的Request对象,就可以直接修改其标头:

let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)
于 2019-01-20T21:38:01.043 回答