es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de script de la plantilla de Cloudflare Worker: redirección por país.

Agarré un script de ejemplo de la página de ejemplo de GitHub de Cloudflare Worker para una redirección simple de países. Falla y no sé por qué (no soy particularmente habilidoso en temas de código).

El error es:

Script modificado; reinicio de contexto. worker.js:17 TypeError no capturado: No se pueden leer las propiedades de indefinido (leyendo 'country') en redirect (worker.js:17)
    en redirect (worker.js:17)
    en worker.js:28 redirect @ worker.js:17 (anónimo) @ worker.js:28 TypeError no capturado (en respuesta): No se pueden leer las propiedades de indefinido (leyendo 'country')

El código de plantilla es:

/**
 * Un mapa de las URL a las que redirigir
 * @param {Object} countryMap
 */
const countryMap = {
  US: "https://example.com/us",
  EU: "https://eu.example.com/",
}

/**
 * Devuelve una redirección determinada por el código de país
 * @param {Request} request
 */
function redirect(request) {
  // Utiliza el objeto cf para obtener el país de la solicitud
  // más información sobre el objeto cf: https://developers.cloudflare.com/workers/runtime-apis/request#incomingrequestcfproperties
  const country = request.cf.country

  if (country != null && country in countryMap) {
    const url = countryMap[country]
    return Response.redirect(url)
  } else {
    return fetch(request)
  }
}

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

Desde:

> https://github.com/cloudflare/cloudflare-docs/blob/production/products/workers/src/content/examples/country-code-redirect.md

¿Alguien tiene algún consejo sobre esto? Esto se está ejecutando en el sistema de Cloudflare Workers.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema al leer la propiedad ‘country’ del objeto request.cf. Esto puede ser causado por varias cosas, como el request que no tiene un objeto cf o el objeto cf que no tiene la propiedad country.

    Como primer paso, es posible que desee verificar si el request tiene un objeto cf mediante console.log en la función de redireccionamiento:

    console.log(request.cf);
    

    Si el objeto cf existe, debería ver el objeto registrado en la consola del navegador cuando haga una solicitud. A partir de ahí, puede verificar si tiene la propiedad country mediante console.log de la propiedad ‘country’:

    console.log(request.cf.country);
    

    Si el objeto cf existe pero la propiedad country es indefinida, podría ser que la solicitud no provenga de una ubicación con un código de país conocido o que la búsqueda del país no esté funcionando como se espera. También puede intentar registrar todo el objeto de solicitud para ver si hay otras propiedades que puedan estar causando problemas.

    Si el objeto cf no existe, podría ser que la solicitud no esté pasando por Cloudflare o que el Worker no esté configurado correctamente para leer el objeto cf. Puede verificar si el Worker está correctamente configurado para manejar las solicitudes mirando la configuración de Cloudflare Workers y verificando que el Worker esté habilitado y configurado para manejar solicitudes en los dominios relevantes.

    Si continúa teniendo problemas, es posible que desee considerar comunicarse con el soporte de Cloudflare o publicar en el foro de la comunidad de Cloudflare Workers para obtener más ayuda.

Comments are closed.