Desarrollo Rápido de Aplicaciones con Node.js y Express.js

Desarrollo Rápido de Aplicaciones con Node.js y Express.js

Tutorial Node.js y Express: crea tu primera API con MongoDB paso a paso

¿Quieres dar tus primeros pasos en el backend con Node.js y Express? En este tutorial Node.js Express aprenderás a crear un servidor Node.js desde cero, manejar rutas y middleware, y conectar tu API a MongoDB usando Mongoose. Está pensado para desarrolladores principiantes e intermedios que buscan construir aplicaciones web con Express de manera clara y profesional.

Al finalizar tendrás una API REST funcional con operaciones CRUD completa, lista para seguir creciendo.

Objetivos del tutorial

  • Instalar y preparar el entorno de desarrollo.
  • Crear servidor Node.js básico con Express.
  • Manejar rutas y controladores.
  • Aplicar middleware esencial (JSON, CORS, logs, errores).
  • Conectar a una base de datos MongoDB con Mongoose.
  • Implementar un CRUD de ejemplo (tareas).

Requisitos previos

  • Conocimientos básicos de JavaScript.
  • Node.js instalado (v18+ recomendado).
  • Cuenta de MongoDB Atlas o una instancia local de MongoDB.

1) Instalación y preparación del entorno

1.1 Verifica tu versión de Node.js y npm

Asegúrate de tener Node.js y npm instalados.

Si no los tienes o usas una versión muy antigua, instala la última LTS desde nodejs.org o administra versiones con nvm.

1.2 Crea el proyecto base

Elige una carpeta y ejecuta:

Instala dependencias necesarias:

  • express: framework minimalista para backend con Node.js.
  • mongoose: ODM para conectarse y modelar datos en MongoDB.
  • dotenv: gestión de variables de entorno.
  • cors: habilitar CORS para clientes web.
  • morgan: logger HTTP en desarrollo.
  • nodemon: reinicio automático del servidor durante el desarrollo.

1.3 Estructura de carpetas recomendada

Crea los directorios vacíos para ir añadiendo archivos.

2) Configura scripts de arranque

Abre package.json y agrega los scripts para desarrollo y producción.

Nota: Si tu package.json ya tiene campos por defecto, solo añade o ajusta la sección de scripts.

3) Variables de entorno (.env)

Crea un archivo .env en la raíz del proyecto para gestionar datos sensibles:

Si usas MongoDB Atlas, tu MONGODB_URI se verá similar a:

Asegúrate de no commitear tu .env a repositorios públicos. Añádelo a .gitignore.

4) Conexión a MongoDB con Mongoose

Crea src/config/db.js para centralizar la conexión a la base de datos.

5) Crea el servidor básico con Express

Implementa un servidor mínimo que cargue variables de entorno, conecte a MongoDB y exponga un endpoint de estado.

Con esto ya tienes un backend con Node.js levantando un servidor. Probemos la ruta de salud:

6) Modelo de datos con Mongoose

Definamos un modelo sencillo de tarea con título, descripción y estado.

7) Controladores: lógica de negocio

Creemos controladores con operaciones CRUD y paginación simple.

8) Rutas con Express Router

Define las rutas REST para interactuar con las tareas.

9) Middleware de errores y 404

Un backend con Node.js robusto debe gestionar errores y rutas no encontradas de forma consistente.

10) Arranca el servidor

Inicia el modo desarrollo con nodemon:

Deberías ver en consola algo como:

11) Probar la API: ejemplos con curl

11.1 Crear una tarea

Respuesta (201):

11.2 Listar tareas con paginación y búsqueda

11.3 Obtener, actualizar y eliminar por ID

Consejo: También puedes usar Postman o Insomnia para probar la API con una interfaz visual.

12) Explicación de los conceptos clave

12.1 Crear servidor Node.js con Express

  • express() crea la aplicación.
  • app.use() registra middleware global.
  • app.get(), app.post(), etc., definen rutas.
  • app.listen() abre el puerto y deja el servidor a la espera de peticiones.

12.2 Middleware en Express

Un middleware es una función que recibe req, res y next. Sirve para:

  • Analizar el body (express.json()).
  • Habilitar CORS (cors()).
  • Registrar peticiones (morgan).
  • Manejar errores de forma centralizada.

Se ejecutan en orden de registro, lo que facilita la composición de funcionalidades.

12.3 Rutas y controladores

Separar rutas de controladores mejora la mantenibilidad:

  • Rutas: definen endpoints y métodos HTTP.
  • Controladores: implementan la lógica de negocio (leer/parcial/validar datos, llamar a la capa de datos, formatear respuesta).

12.4 Mongoose y modelos

  • Un Schema define la forma de los documentos.
  • Un Model aplica el schema para crear/leer/actualizar/eliminar en la colección.
  • Mongoose también ofrece validaciones y middlewares de documento.

13) Buenas prácticas para aplicaciones web con Express

  • Variables de entorno: nunca subas .env al repo; usa dotenv y valores por entorno.
  • Validación de entrada: usa Joi, Zod o Yup para validar req.body, req.params y req.query.
  • Manejo de errores: un único errorHandler reduce repetición y respuestas inconsistentes.
  • Seguridad: añade helmet, limitador de tasa (express-rate-limit) y saneamiento de entrada.
  • Logs: usa morgan en desarrollo y un logger estructurado (pino/winston) en producción.
  • CORS: restrínge orígenes permitidos en producción.
  • Testing: Jest + Supertest para tests de integración en endpoints.
  • Linting y formato: ESLint y Prettier para mantener código consistente.
  • Versionado de la API: prefija rutas con /api/v1 si prevés cambios futuros.
  • Control de errores en promesas: siempre try/catch o captura en then/catch.
  • Índices en MongoDB: define índices para campos consultados con frecuencia (por ejemplo, title si buscas por él).
  • Desacopla configuración: lecturas de process.env en una capa de config central.

Ejemplo de validación rápida con Zod para createTask:

14) Despliegue básico

  • Variables de entorno: configura PORT, MONGODBURI y MONGODBDB en tu plataforma (Railway, Render, Fly.io, etc.).
  • Start script: usa npm start.
  • Logs y salud: conserva /health para chequeos.
  • CORS: configura orígenes permitidos a tu dominio del frontend.

15) Solución de problemas comunes

  • Error ECONNREFUSED a MongoDB: verifica que el demonio de MongoDB está corriendo localmente o que tu cadena de conexión de Atlas es correcta y tu IP está permitida.
  • CastError al consultar por ID: asegúrate de usar un ObjectId válido de MongoDB.
  • CORS bloqueando tu frontend: ajusta cors({ origin: ‘https://tu-dominio.com’ }).
  • No se recarga el servidor: ejecuta npm run dev para usar nodemon.

Conclusión: tu primer backend con Node.js está listo

Has construido paso a paso un backend con Node.js y Express, implementando rutas, middleware y conexión a MongoDB con Mongoose. Este tutorial Node.js Express te deja la base perfecta para crear aplicaciones web con Express más complejas: autenticación, autorización por roles, subida de archivos, colas de trabajo y más.

Siguiente reto: añade autenticación JWT, tests de integración y validaciones exhaustivas. Si este tutorial te fue útil, compártelo con tu equipo y guarda la guía como referencia para tu próximo proyecto.

¡Ahora sí, a construir!