Qué significa EADDRINUSE: address already in use y cómo solucionarlo
Referencia del error
EADDRINUSE: address already in use
Lenguaje
Severidad
AltaCuándo ocurre
EADDRINUSE ocurre cuando un proceso intenta vincularse a un puerto que ya está ocupado por otro proceso.
Posibles soluciones
Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.
Errores relacionados
Más detalles
EADDRINUSE ocurre cuando un proceso intenta vincularse a un puerto que ya está ocupado por otro proceso. No es exclusivo de Node.js — el sistema operativo solo permite que un proceso escuche en un puerto dado a la vez, ya sea un servidor Node, un script de Python o cualquier otro programa, en Windows, macOS o Linux.
Por qué ocurre
- •Una instancia anterior del mismo proceso servidor no terminó correctamente y sigue ocupando el puerto.
- •Una aplicación diferente (una base de datos, otro servidor de desarrollo, un proxy) ya está escuchando en ese puerto.
- •El hot-reload o el modo watch reinició el proceso antes de que el socket TCP anterior se liberara completamente.
- •Ejecutar múltiples conjuntos de tests o instancias de servidor en paralelo sin asignar puertos diferentes.
- •El mismo conflicto aparece fuera de Node.js también — un servidor Python, un servicio de Windows, o cualquier programa que intente usar un puerto que ya tiene otro.
Posibles soluciones
Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.
Ejemplos
Código que causa el error
const http = require("http");
const server = http.createServer((req, res) => {
res.end("Hello");
});
server.listen(3000, () => console.log("Listening on port 3000"));Error en la terminal
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1739:16)Código corregido
const http = require("http");
const PORT = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
res.end("Hello");
});
server.on("error", (err) => {
if (err.code === "EADDRINUSE") {
console.error(`Port ${PORT} is in use. Kill the process or use a different port.`);
process.exit(1);
}
});
server.listen(PORT, () => console.log(`Listening on port ${PORT}`));Practica en inglés
¿Cómo le explicarías un EADDRINUSE: address already in use a un compañero dev? Elige la frase correcta:
"I hit an error...
¿Programando en inglés?
Para arreglar esto, leíste inglés técnico real. Lingua-e tiene ejercicios gratis hechos igual: dailys, code reviews y situaciones reales de trabajo.
Practicar inglés para developers gratis