Saltar al contenido principal

Primeros pasos con Node.js y Express: tu primer servidor web

4 min readIgnacio Avilés

Node.js ha revolucionado el desarrollo backend gracias a su arquitectura basada en eventos y su velocidad. Pero desarrollar aplicaciones desde cero puede ser tedioso, y aquí es donde entra Express.js: un framework minimalista que simplifica la creación de servidores web y APIs. En esta guía aprenderás qué es Node con Express, cómo instalarlo y cómo arrancar tu primer proyecto.

¿Qué es Node.js con Express?

  • Node.js: entorno de ejecución de JavaScript del lado del servidor, basado en el motor V8 de Chrome.
  • Express.js: un framework liviano y rápido para Node.js que permite crear servidores y gestionar rutas fácilmente.

Instalación de Node.js y Express

Paso 1: Instalar Node.js

  • Descarga e instala la versión LTS de Node.js desde nodejs.org.
  • Verifica la instalación con:
node -v
npm -v

Paso 2: Crear un proyecto con Express

Inicia un nuevo proyecto:

mkdir servidor
cd servidor
npm init -y

Instala Express:

npm install express

Esto instala Express 5, la versión actual. Si sigues tutoriales antiguos escritos para Express 4, casi todo funciona igual; la diferencia más visible es que en Express 5 los errores lanzados dentro de un handler async llegan solos al manejador de errores.

Cómo empezar con Express

Crear un servidor básico

Crea un archivo server.js:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('¡Hola desde Express!');
});

app.listen(3000, () => {
    console.log('Servidor corriendo en http://localhost:3000');
});

Ejecuta el servidor:

node server.js

Una vez ejecutado, puedes acceder en tu navegador a http://localhost:3000.

Hot reload con Nodemon

Para que el servidor se reinicie automáticamente con cada cambio en el código, instala nodemon:

npm i -D nodemon

En el package.json, dentro de la sección scripts, agrega:

"dev": "nodemon server.js"

Ahora usa npm run dev en lugar de node server.js y el servidor se reiniciará solo ante cada cambio.

Alternativa sin dependencias: las versiones actuales de Node traen el modo watch integrado. node --watch server.js hace lo mismo que nodemon para la mayoría de los casos.

Más allá del "Hola mundo": una mini API

Un servidor que solo devuelve texto no sirve de mucho. Así se ve una API pequeña que recibe y devuelve JSON:

const express = require('express');
const app = express();

// Middleware: convierte el body JSON de cada petición en req.body
app.use(express.json());

const tareas = [{ id: 1, texto: 'Aprender Express' }];

app.get('/tareas', (req, res) => {
    res.json(tareas);
});

app.get('/tareas/:id', (req, res) => {
    const tarea = tareas.find((t) => t.id === Number(req.params.id));
    if (!tarea) return res.status(404).json({ error: 'No existe' });
    res.json(tarea);
});

app.post('/tareas', (req, res) => {
    const nueva = { id: tareas.length + 1, texto: req.body.texto };
    tareas.push(nueva);
    res.status(201).json(nueva);
});

app.listen(3000);

Puedes probarla desde la terminal:

curl -X POST http://localhost:3000/tareas \
  -H "Content-Type: application/json" \
  -d '{"texto": "Conectar una base de datos"}'

Cada petición pasa por una cadena de middlewares antes de llegar a tu ruta. Entender ese recorrido es la mitad de entender Express:

flowchart LR
    A[Petición HTTP] --> B["express.json()"]
    B --> C{¿Coincide una ruta?}
    C -->|Sí| D[Handler de la ruta]
    C -->|No| E[404]
    D --> F[res.json / res.send]
    D -->|error| G[Middleware de errores]

Errores comunes

  • Error: listen EADDRINUSE: address already in use :::3000: ya hay otro proceso usando el puerto (muchas veces, otra instancia de tu propio servidor). Ciérrala o cambia de puerto.
  • req.body es undefined: te falta app.use(express.json()) antes de las rutas, o el cliente no está enviando la cabecera Content-Type: application/json.
  • Cannot GET /ruta: Express no encontró ninguna ruta que coincida. Revisa el método (GET/POST) y la URL exacta.
  • Los cambios no se aplican: estás ejecutando node server.js en vez de npm run dev o node --watch.

Conclusión

Express.js se ha convertido en el framework más popular para desarrollar aplicaciones web y APIs con Node.js gracias a su simplicidad y eficiencia. Con pocos pasos tienes un servidor funcional con gestión de rutas y manejo de peticiones.

Aunque este post cubre los fundamentos, Express tiene muchas más funcionalidades: autenticación, conexión a bases de datos y despliegue en la nube. Si quieres ir un paso más allá, te recomiendo aprender cómo dockerizar tu aplicación, conectar una base de datos MySQL para que las tareas no se pierdan al reiniciar, o pasar el proyecto a TypeScript.

¿Qué proyecto vas a construir con Express?

Video en YouTube

En este video encontrarás el paso a paso completo para lograr crear un servidor usando Node.js y Express.

Primeros pasos con Node.js y ExpressVer en YouTube (se abre en una pestaña nueva)

$ subscribe --newsletter

Recibe los nuevos posts en tu email

Un email cuando publico algo nuevo. Sin ruido, sin relleno.

Sin spam. Baja en cualquier momento. Política de privacidad.

comentarios