Cloudflare Workers Redirect отладки

В коде есть ошибка, но я не могу понять, что.

Uncaught (в обещании) ReferenceError: req не определено в doRedirects (VM8 worker.js:6) при событии (VM8 worker.js:2) Uncaught (в ответ) ReferenceError: req не определено

addEventListener("fetch", event => {
    event.respondWith(doRedirects(event.request))
})

const newLocationHost = "developers.cloudflare.com";

async function doRedirects(request) {
    let reqUA = req.headers.get('user-agent')
    if (reqUA.matches('curl').true) {
        let newLocation = "https://"+newLocationHost
        return Response.redirect(newLocation, 302)
    }
    return fetch(request);
}   

2 ответа

req.headers.get вернет строку или ноль ( документация).

Строки имеют match метод, который принимает регулярное выражение ( документация).

Попробуйте изменить эту строку:

 if (reqUA.matches('curl').true) {

К этому:

if (requUA !== null && reqUA.match(/curl/)) {

Другая проблема заключается в Response класс не имеет redirect метод ( документация).

Попробуйте изменить эту строку:

return Response.redirect(newLocation, 302)

К этому:

return new Response(undefined, {
  status: 302,
  statusText: 'Found',
  headers: {
    Location: newLocation
  }
);

Я знаю, что это старо, и OP, вероятно, уже исправил это, но в интересах предоставления ответа...

Проблема связана с этим разделом:

      async function doRedirects(request) {
    let reqUA = req.headers.get('user-agent')

Здесь вы используете req.headersкогда переменная запроса request. Поэтому вы должны использовать request.headers.

Другие вопросы по тегам