¿Qué es el error CORS y por qué ocurre en Node.js?
El error CORS (Cross-Origin Resource Sharing o Intercambio de Recursos de Origen Cruzado) es un mecanismo de seguridad implementado por los navegadores web. Este bloquea las solicitudes HTTP realizadas desde un dominio (origen) diferente al que sirve la API backend. Si estás desarrollando una aplicación web donde tu frontend (por ejemplo, en React o Vue ejecutándose en localhost:3000) intenta comunicarse con tu API de Node.js y Express (ejecutándose en localhost:5000), el navegador bloqueará la respuesta si no configuras las cabeceras CORS adecuadas.
Causas principales del bloqueo por CORS
Las causas más comunes por las que aparece este error en la consola del navegador incluyen:
- Falta de las cabeceras HTTP de respuesta Access-Control-Allow-Origin en el servidor.
- Intentar realizar peticiones con métodos no permitidos (como PUT o DELETE) sin autorización previa.
- Envío de credenciales (cookies o tokens de autenticación) sin la configuración adecuada de seguridad en el backend.
Método 1: Solucionar el error instalando y configurando el paquete CORS
La forma más limpia, recomendada y rápida de solucionar este problema en Express es utilizando el middleware oficial cors.
- Abre tu terminal en la carpeta raíz de tu proyecto Node.js.
- Instala el paquete ejecutando el siguiente comando:
npm install cors - Abre el archivo principal de tu servidor (por ejemplo,
app.jsoserver.js). - Importa e integra el middleware antes de definir tus rutas:
const express = require('express');
const cors = require('cors');
const app = express();
// Habilitar CORS para todas las rutas y orígenes
app.use(cors());
app.get('/api/data', (req, res) => {
res.json({ message: '¡CORS solucionado con éxito!' });
app.listen(5000, () => {
console.log('Servidor corriendo en el puerto 5000');
Método 2: Configurar CORS de forma restrictiva para producción
Permitir el acceso a cualquier origen (usando app.use(cors())) puede ser un riesgo de seguridad en entornos de producción. Es mejor configurar un dominio específico que tenga permiso para consumir tu API.
- Modifica la configuración del middleware especificando la opción
origin:
const express = require('express');
const cors = require('cors');
const app = express();
const corsOptions = {
origin: 'https://tu-dominio-frontend.com',
optionsSuccessStatus: 200
};
app.use(cors(corsOptions));
app.get('/api/secure', (req, res) => {
res.json({ message: 'Acceso seguro y permitido por CORS' });
app.listen(5000);