Javascript Cloudflare рабочий скрипт не разрешает отправлять запросы - PullRequest
0 голосов
/ 20 января 2019

Итак, я тестирую сценарий web-работника cloudflare и не могу заставить свой код работать с запросами 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

Кто-нибудь может увидеть, что я делаю не так?

1 Ответ

0 голосов
/ 21 января 2019

Проблема в том, что вы копируете только method и headers из запроса, но у него больше свойств, чем у этого. Например, POST-запросы имеют свойство body, которое не копируется вашим кодом.

Чтобы выполнить выборку, которая наследует все от исходного запроса, кроме URL, выполните:

const response = await fetch(url_without_query_strings, request)

То есть, передайте request как второй параметр, а не как dict. Это работает, потому что объект запроса имеет имена свойств, точно совпадающие со всеми параметрами, которые ожидает второй параметр fetch().

Обратите внимание, что неловко, если вы хотите изменить какое-либо свойство запроса, кроме URL, но оставить другие свойства такими же, тогда вы должны передать запрос как параметр first и указать изменения в Второй параметр:

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)
...