Cambiar el puerto usando variables de entorno
Uno de los primeros problemas reales cuando levantas un servidor es el conflicto de puertos. El típico puerto 3000 puede estar ocupado por otra aplicación y, si lo tienes hardcodeado, tu servidor simplemente no arranca.
En esta clase vamos a ver cómo hacer el puerto configurable, primero entendiendo el problema y luego resolviéndolo correctamente con variables de entorno.
El problema de fijar el puerto en el código
Si defines el puerto directamente en el código, tu aplicación se vuelve poco flexible:
server.listen(3000, () => {
console.log('Servidor en http://localhost:3000')
})
Si el puerto 3000 ya está siendo usado por otro servicio (como un frontend de React o un proceso de Docker), recibirás un error de tipo EADDRINUSE y el servidor se detendrá.
Además, en entornos de producción (como AWS, Vercel o Railway), no sueles elegir tú el puerto; el proveedor te lo asigna dinámicamente y te lo pasa a través de una variable.
¿Qué son las variables de entorno?
Las variables de entorno son valores externos a tu código que definen cómo debe comportarse tu aplicación según el entorno donde se ejecute (desarrollo, testing, producción).
En Node.js, podemos acceder a estas variables a través del objeto global process.env.
Usando el puerto de forma dinámica
Para que nuestro servidor sea flexible, debemos intentar leer el puerto desde una variable de entorno llamada PORT. Si no existe, entonces podemos usar un valor por defecto (como el 3000).
// Leemos el puerto de la variable de entorno o usamos el 3000 por defecto
const desiredPort = process.env.PORT ?? 3000
server.listen(desiredPort, () => {
console.log(`Servidor escuchando en el puerto http://localhost:${desiredPort}`)
})
¿Cómo pasamos el puerto desde la terminal?
Al ejecutar tu script de Node.js, puedes definir la variable de entorno justo antes del comando:
PORT=1234 node servidor.js
Ahora, tu servidor escuchará en el puerto 1234 sin que hayas tenido que tocar ni una sola línea de código.
Beneficios de este enfoque
- Portabilidad: Tu aplicación puede correr en cualquier máquina sin preocuparte de si el puerto 3000 está libre.
- Preparado para producción: Casi todos los servicios de hosting inyectan una variable
PORTautomáticamente. - Seguridad: Puedes ocultar información sensible (como claves de API o URLs de bases de datos) fuera de tu código fuente.
El repaso final
- ✅ Entendimos por qué hardcodear el puerto es una mala práctica.
- ✅ Aprendimos qué es
process.envy cómo acceder a variables externas. - ✅ Implementamos un puerto dinámico con un valor de respaldo (fallback).
- ✅ Vimos cómo pasar variables de entorno directamente desde la terminal.
Configurar el puerto correctamente es el primer paso para crear aplicaciones de Node.js profesionales y escalables. ¡Nos vemos en la siguiente clase!