¿Qué es el Error CORS y por qué ocurre en JavaScript?
El error CORS (Cross-Origin Resource Sharing) es un mecanismo de seguridad implementado por los navegadores web que restringe las solicitudes HTTP realizadas desde un dominio (origen) hacia un servidor ubicado en un dominio diferente. Cuando desarrollas aplicaciones web utilizando JavaScript del lado del cliente (como React, Vue o Vanilla JS) que intentan comunicarse con una API en Node.js o Express sin la configuración adecuada de cabeceras, el navegador bloquea la respuesta de forma automática.
Causas Principales del Bloqueo CORS
- El servidor backend no incluye las cabeceras HTTP necesarias (como
Access-Control-Allow-Origin). - Intentar realizar peticiones desde un puerto o protocolo diferente sin autorización explícita.
- Uso de métodos HTTP avanzados (como PUT, DELETE o peticiones con cabeceras personalizadas) que requieren una solicitud previa de tipo
OPTIONS(preflight request) la cual es rechazada por el servidor.
Método 1: Configurar CORS en el Servidor con Node.js y Express
La forma más rápida y recomendada de solucionar este problema en un entorno de desarrollo backend con Node.js es utilizando el paquete oficial cors. Sigue estos pasos para implementarlo:
- Abre tu terminal en la raíz del proyecto backend y ejecuta el comando de instalación:
npm install cors - Abre tu archivo principal del servidor (por ejemplo,
server.jsoapp.js). - Importa el paquete e instálalo como un middleware global antes de definir tus rutas:
const cors = require('cors');
const app = express();
app.use(cors());
Método 2: Configurar Orígenes Específicos para Mayor Seguridad
Si tu aplicación va a pasar a producción, dejar CORS abierto para cualquier dominio (*) puede representar un riesgo de seguridad. Es recomendable limitar el acceso únicamente a tu frontend autorizado:
- Modifica la implementación del middleware de CORS pasando un objeto de configuración con la propiedad
origin. - Define la URL exacta de tu aplicación cliente.
const corsOptions = { origin: 'https://tu-frontend-web.com', optionsSuccessStatus: 200 };
app.use(cors(corsOptions));
Método 3: Habilitar CORS de Forma Manual sin Librerías Externas
Si por alguna razón no puedes instalar paquetes adicionales en tu servidor Node.js, puedes configurar manualmente las cabeceras HTTP creando un middleware personalizado:
- Crea una función middleware que intercepta todas las peticiones entrantes.
- Agrega las cabeceras de control de acceso directamente en el objeto de respuesta
res.
app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next(); });