Solución: fetch is not defined en Node.js
Node.js lanza ReferenceError al usar fetch() porque no está disponible de forma nativa en versiones antiguas. Soluciones para Node 16, 17 y cómo usar el fetch nativo en Node 18+.
¿Por qué ocurre?
La API fetch es nativa del navegador. Node.js solo la incluyó de forma estable a partir de la versión 18. Si usas Node 16 o 17, fetch no existe globalmente y tienes que usar un polyfill o una librería alternativa.
Solución paso a paso
Comprueba tu versión de Node primero:
node --version
Si tienes Node 18 o superior — fetch ya está disponible:
// Funciona directamente, sin instalar nada
const res = await fetch('https://api.example.com/datos');
const data = await res.json();
Si aun así falla, puede ser que tu tsconfig.json no incluya las librerías correctas (TypeScript):
{
"compilerOptions": {
"lib": ["ES2022", "DOM"]
}
}
Si tienes Node 16 o 17 — usa node-fetch:
npm install node-fetch
// CommonJS
const fetch = require('node-fetch');// ESM
import fetch from 'node-fetch';
const res = await fetch('https://api.example.com/datos');
const data = await res.json();
Alternativa — usa axios (funciona en todas las versiones):
npm install axios
import axios from 'axios';const { data } = await axios.get('https://api.example.com/datos');
Alternativa nativa en Node.js (todas las versiones) — https module:
const https = require('https');function get(url) {
return new Promise((resolve, reject) => {
https.get(url, res => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => resolve(JSON.parse(body)));
}).on('error', reject);
});
}
Cómo evitarlo en el futuro
Actualiza a Node 18 LTS o superior — tiene fetch nativo, mejor rendimiento y soporte a largo plazo. Usa `nvm` (Mac/Linux) o `nvm-windows` (Windows) para gestionar múltiples versiones de Node fácilmente.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts