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
.