El enrutamiento es un concepto fundamental en el desarrollo de aplicaciones web. En Node.js, especialmente cuando se utiliza el framework Express.js, el enrutamiento permite definir cómo una aplicación responde a una solicitud de un cliente en un punto final específico, que es una URI (o ruta) y un método HTTP específico (GET, POST, etc.).
Conceptos Clave
- Ruta: Una ruta es una combinación de una URL y un método HTTP (GET, POST, PUT, DELETE, etc.).
- Controlador de Ruta: Una función que se ejecuta cuando se accede a una ruta específica.
- Parámetros de Ruta: Variables en la ruta que pueden capturar valores específicos de la URL.
- Middleware: Funciones que tienen acceso al objeto de solicitud (req), al objeto de respuesta (res) y a la siguiente función de middleware en el ciclo de solicitud/respuesta de la aplicación.
Configuración Básica de Rutas en Express.js
Instalación de Express.js
Antes de comenzar, asegúrate de tener Express.js instalado en tu proyecto. Si no lo tienes, puedes instalarlo usando npm:
Creación de un Servidor Básico con Rutas
A continuación, se muestra un ejemplo básico de cómo configurar un servidor Express.js con algunas rutas simples:
// Importar el módulo express const express = require('express'); // Crear una instancia de la aplicación Express const app = express(); // Definir una ruta GET en la raíz app.get('/', (req, res) => { res.send('¡Hola, mundo!'); }); // Definir una ruta GET en /about app.get('/about', (req, res) => { res.send('Acerca de nosotros'); }); // Definir una ruta GET con un parámetro de ruta app.get('/user/:id', (req, res) => { const userId = req.params.id; res.send(`Usuario ID: ${userId}`); }); // Iniciar el servidor en el puerto 3000 const PORT = 3000; app.listen(PORT, () => { console.log(`Servidor escuchando en el puerto ${PORT}`); });
Explicación del Código
-
Importar Express:
const express = require('express');
- Importa el módulo Express para poder utilizarlo en la aplicación.
-
Crear una Aplicación Express:
const app = express();
- Crea una instancia de la aplicación Express.
-
Definir Rutas:
app.get('/', (req, res) => { ... });
: Define una ruta GET en la raíz (/
) que responde con "¡Hola, mundo!".app.get('/about', (req, res) => { ... });
: Define una ruta GET en/about
que responde con "Acerca de nosotros".app.get('/user/:id', (req, res) => { ... });
: Define una ruta GET con un parámetro de ruta (:id
). El valor del parámetro se puede acceder a través dereq.params.id
.
-
Iniciar el Servidor:
app.listen(PORT, () => { ... });
- Inicia el servidor en el puerto especificado (3000 en este caso) y muestra un mensaje en la consola cuando el servidor está listo.
Ejemplo de Rutas con Diferentes Métodos HTTP
Express.js permite definir rutas para diferentes métodos HTTP. Aquí hay un ejemplo que muestra cómo hacerlo:
// Ruta GET app.get('/data', (req, res) => { res.send('Método GET'); }); // Ruta POST app.post('/data', (req, res) => { res.send('Método POST'); }); // Ruta PUT app.put('/data', (req, res) => { res.send('Método PUT'); }); // Ruta DELETE app.delete('/data', (req, res) => { res.send('Método DELETE'); });
Ejercicio Práctico
Ejercicio 1: Crear Rutas Básicas
- Crea una nueva aplicación Express.
- Define las siguientes rutas:
- Una ruta GET en
/
que responda con "Página de inicio". - Una ruta GET en
/contact
que responda con "Página de contacto". - Una ruta GET en
/user/:name
que responda con "Hola, [nombre]", donde[nombre]
es el valor del parámetro de ruta.
- Una ruta GET en
Solución
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Página de inicio'); }); app.get('/contact', (req, res) => { res.send('Página de contacto'); }); app.get('/user/:name', (req, res) => { const userName = req.params.name; res.send(`Hola, ${userName}`); }); const PORT = 3000; app.listen(PORT, () => { console.log(`Servidor escuchando en el puerto ${PORT}`); });
Ejercicio 2: Rutas con Diferentes Métodos HTTP
- Define una ruta POST en
/submit
que responda con "Formulario enviado". - Define una ruta PUT en
/update
que responda con "Datos actualizados". - Define una ruta DELETE en
/delete
que responda con "Datos eliminados".
Solución
app.post('/submit', (req, res) => { res.send('Formulario enviado'); }); app.put('/update', (req, res) => { res.send('Datos actualizados'); }); app.delete('/delete', (req, res) => { res.send('Datos eliminados'); });
Conclusión
El enrutamiento en Express.js es una herramienta poderosa que permite definir cómo una aplicación responde a las solicitudes del cliente en diferentes puntos finales. Al comprender y utilizar rutas, parámetros de ruta y diferentes métodos HTTP, puedes crear aplicaciones web robustas y dinámicas. En el próximo módulo, exploraremos cómo manejar errores y utilizar middleware para mejorar aún más nuestras aplicaciones Express.js.
Curso de Node.js
Módulo 1: Introducción a Node.js
Módulo 2: Conceptos Básicos
Módulo 3: Sistema de Archivos y E/S
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Sirviendo Archivos Estáticos
- Enrutamiento
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM
- Instalación y Uso de Paquetes
- Creación y Publicación de Paquetes
- Versionado Semántico
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Middleware
- Enrutamiento en Express
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Usando Bases de Datos SQL con Sequelize
- Operaciones CRUD
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Usando Passport.js
- Autenticación JWT
- Control de Acceso Basado en Roles
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Pruebas de Integración
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- Módulo Cluster
- Hilos de Trabajo
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Variables de Entorno
- Usando PM2 para la Gestión de Procesos
- Desplegando en Heroku
- Integración y Despliegue Continuos