Resumen

Cuando una aplicación de frontend intenta conectarse a tu API y recibe un error inesperado, lo más probable es que estés frente al problema de CORS. Antes de llevar cualquier proyecto a producción, es fundamental entender este concepto y conocer las consideraciones de seguridad que protegen tu servidor.

¿Qué revisar antes de enviar tu API a producción?

Existe una serie de recomendaciones que vale la pena evaluar antes de desplegar. No se trata de una guía definitiva, pero sí de puntos críticos que pueden evitar problemas serios en un ambiente productivo.

  • Evaluar los CORS: definir a quiénes les das acceso para realizar solicitudes a tu API [0:18].
  • Usar HTTPS: un servidor con conexión cifrada impide que terceros intercepten la información que viaja entre cliente y servidor [0:30].
  • Procesos de build: si usas TypeScript u otra tecnología que necesita compilación, asegúrate de que el proceso corra correctamente antes del despliegue [0:42].
  • Remover todos los logs: los console.log en producción pueden generar delays innecesarios. Es mejor usar herramientas como Sentry, Zap o Datadog para capturar eventos [0:57].
  • Implementar seguridad desde el inicio: Helmet es una colección de middlewares para Node.js que añade capas de seguridad a tu aplicación de forma sencilla [1:13].
  • Ejecutar pruebas unitarias o de integración: correr tests antes de subir a producción reduce significativamente los errores [1:25].

¿Qué significa CORS y por qué bloquea tus peticiones?

CORS son las siglas de Cross-Origin Resource Sharing [1:40]. En términos simples, los servidores tienen una protección por defecto que solo acepta peticiones desde su mismo origen.

¿Qué es el "mismo origen"?

Cuando desarrollas localmente, tu API corre en localhost:3000. Si las peticiones salen desde ese mismo dominio y puerto, el backend las acepta sin problema [1:55]. Sin embargo, en el mundo real las aplicaciones se conectan desde orígenes diferentes:

  • Tu API vive en api.mydomain.com.
  • Tu frontend en Angular o React corre en mydomain.com.
  • Una segunda aplicación está en otro.mydomain.com.

Cuando cualquiera de estos dominios intenta hacer una solicitud a la API, el servidor detecta que el origen no coincide y cancela la petición automáticamente [2:18].

¿Cómo se ve el error de CORS en la práctica?

Al simular una single page application con un archivo HTML corriendo en localhost:8080 y hacer un fetch hacia localhost:3000, el navegador muestra un error claro [2:52]: el origen no es el mismo, los puertos son diferentes, y el servidor rechaza la conexión.

Aquí viene un detalle que causa mucha confusión entre equipos de desarrollo. Herramientas como Insomnia o Postman nunca muestran este error [3:28]. La razón es que estas aplicaciones generan un proxy interno que modifica el origen de la petición para que coincida con la URL de destino. Entonces, cuando un desarrollador backend dice "a mí todo me funciona en Postman", es técnicamente cierto, pero el problema aparece cuando el frontend real se conecta desde un navegador.

El error de CORS es uno de los problemas más comunes en la comunicación entre backend y frontend [1:33]. Reconocerlo rápidamente te ahorra horas de depuración.

¿Cómo puedes solucionar el error de CORS?

Antes de buscar la respuesta directa, el reto es intentar encontrar una solución por cuenta propia y compartirla con la comunidad. Investigar cómo habilitar orígenes específicos en tu servidor Node.js es un excelente ejercicio para comprender a fondo el mecanismo de seguridad que protege tu API. Si ya tienes una idea, compártela en los comentarios.