Javascript Cloudflare 工作脚本不允许 post 请求
Javascript Cloudflare worker script not allowing post requests
所以我正在测试一个 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
谁能看出我做错了什么?
问题是您只是从请求中复制了 method
和 headers
,但它具有更多的属性。例如,POST 请求有一个 body
属性,您的代码没有复制它。
为了执行从原始请求继承除 URL 之外的所有内容的提取,请执行:
const response = await fetch(url_without_query_strings, request)
也就是说,将 request
本身作为第二个参数传递,而不是 dict。这是有效的,因为请求 object 具有 属性 名称完全匹配 fetch()
的第二个参数期望的所有选项。
请注意,尴尬的是,如果您想修改 URL 以外的任何请求 属性,但保持其他属性不变,则必须将请求作为 第一个参数并在第二个参数中指定修改:
const response = await fetch(request, {headers: myHeaders})
这意味着如果你想修改URL和一些其他的属性,你需要执行两个步骤——首先创建一个新的Request
object即修改URL,则修改headers:
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)
或者,对于 headers 的特定情况,您可以利用以下事实:一旦您构建了自己的 Request
object,您就可以直接修改其 headers:
let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)
所以我正在测试一个 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
谁能看出我做错了什么?
问题是您只是从请求中复制了 method
和 headers
,但它具有更多的属性。例如,POST 请求有一个 body
属性,您的代码没有复制它。
为了执行从原始请求继承除 URL 之外的所有内容的提取,请执行:
const response = await fetch(url_without_query_strings, request)
也就是说,将 request
本身作为第二个参数传递,而不是 dict。这是有效的,因为请求 object 具有 属性 名称完全匹配 fetch()
的第二个参数期望的所有选项。
请注意,尴尬的是,如果您想修改 URL 以外的任何请求 属性,但保持其他属性不变,则必须将请求作为 第一个参数并在第二个参数中指定修改:
const response = await fetch(request, {headers: myHeaders})
这意味着如果你想修改URL和一些其他的属性,你需要执行两个步骤——首先创建一个新的Request
object即修改URL,则修改headers:
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)
或者,对于 headers 的特定情况,您可以利用以下事实:一旦您构建了自己的 Request
object,您就可以直接修改其 headers:
let request2 = new Request(newUrl, request)
request2.headers.set("X-Foo", "Bar")
const response = await fetch(request2)