C0n*_*0nk 1 javascript cloudflare-workers
因此,我正在测试 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
Run Code Online (Sandbox Code Playgroud)
谁能看到我做错了什么吗?
问题是您只是从请求中复制method和,但它具有更多的属性。headers例如,POST 请求具有body您的代码未复制的属性。
为了执行继承原始请求中除 URL 之外的所有内容的获取,请执行以下操作:
const response = await fetch(url_without_query_strings, request)
Run Code Online (Sandbox Code Playgroud)
也就是说,将其request自身作为第二个参数传递,而不是字典。fetch()这是有效的,因为请求对象的属性名称与第二个参数期望的所有选项完全匹配。
请注意,尴尬的是,如果您想修改除 URL 之外的任何请求属性,但保持其他属性相同,则必须将请求作为第一个参数传递,并在第二个参数中指定修改:
const response = await fetch(request, {headers: myHeaders})
Run Code Online (Sandbox Code Playgroud)
这意味着如果要修改 URL和其他一些属性,则需要执行两个步骤 - 首先创建一个Request更改 URL 的新对象,然后修改标头:
let request2 = new Request(newUrl, request)
const response = await fetch(request2, {headers: myHeaders})
Run Code Online (Sandbox Code Playgroud)
或者,当然,您可以执行相反的顺序:
let request2 = new Request(request, {headers: myHeaders})
const response = await fetch(newUrl, request2)
Run Code Online (Sandbox Code Playgroud)
或者,对于标头的特定情况,您可以利用这样一个事实:一旦构造了自己的Request对象,就可以直接修改其标头:
let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |