El enrutamiento en Express.js es una de las características más importantes y poderosas del framework. Permite definir cómo una aplicación responde a una solicitud de cliente en una URL específica, con un método HTTP específico (GET, POST, etc.). En esta sección, aprenderás cómo configurar rutas en Express y cómo manejar diferentes tipos de solicitudes.

Conceptos Clave

  1. Rutas Básicas: Definición de rutas simples que responden a solicitudes HTTP.
  2. Parámetros de Ruta: Captura de valores dinámicos en la URL.
  3. Rutas Anidadas: Organización de rutas en subrutas para una mejor estructura.
  4. Manejo de Errores en Rutas: Cómo manejar errores en las rutas.

Rutas Básicas

Las rutas en Express se definen utilizando métodos específicos del objeto app (como app.get, app.post, etc.). Aquí tienes un ejemplo básico:

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

// Ruta GET básica
app.get('/', (req, res) => {
  res.send('¡Hola, Mundo!');
});

// Ruta POST básica
app.post('/submit', (req, res) => {
  res.send('Formulario enviado');
});

app.listen(port, () => {
  console.log(`Servidor escuchando en http://localhost:${port}`);
});

Explicación del Código

  • app.get('/', (req, res) => { ... }): Define una ruta que responde a solicitudes GET en la URL raíz (/).
  • app.post('/submit', (req, res) => { ... }): Define una ruta que responde a solicitudes POST en la URL /submit.
  • app.listen(port, () => { ... }): Inicia el servidor y lo hace escuchar en el puerto especificado.

Parámetros de Ruta

Los parámetros de ruta permiten capturar valores dinámicos en la URL. Se definen utilizando dos puntos (:) seguidos del nombre del parámetro.

// Ruta con parámetro de ruta
app.get('/user/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`Usuario ID: ${userId}`);
});

Explicación del Código

  • app.get('/user/:id', (req, res) => { ... }): Define una ruta que captura el parámetro id de la URL.
  • req.params.id: Accede al valor del parámetro id en la solicitud.

Rutas Anidadas

Para organizar mejor las rutas, puedes utilizar el objeto express.Router(). Esto permite definir subrutas y agruparlas lógicamente.

const userRouter = express.Router();

// Subruta para obtener información del usuario
userRouter.get('/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`Información del usuario con ID: ${userId}`);
});

// Subruta para actualizar información del usuario
userRouter.put('/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`Actualizando usuario con ID: ${userId}`);
});

// Montar el router en la aplicación principal
app.use('/user', userRouter);

Explicación del Código

  • const userRouter = express.Router(): Crea un nuevo router.
  • userRouter.get('/:id', (req, res) => { ... }): Define una subruta GET en el router.
  • userRouter.put('/:id', (req, res) => { ... }): Define una subruta PUT en el router.
  • app.use('/user', userRouter): Monta el router en la aplicación principal bajo la ruta /user.

Manejo de Errores en Rutas

Es importante manejar errores en las rutas para proporcionar una mejor experiencia de usuario y depuración.

app.get('/error', (req, res, next) => {
  const err = new Error('Algo salió mal');
  err.status = 500;
  next(err);
});

// Middleware de manejo de errores
app.use((err, req, res, next) => {
  res.status(err.status || 500);
  res.send({
    error: {
      message: err.message
    }
  });
});

Explicación del Código

  • const err = new Error('Algo salió mal'): Crea un nuevo objeto de error.
  • next(err): Pasa el error al siguiente middleware.
  • app.use((err, req, res, next) => { ... }): Middleware de manejo de errores que responde con el mensaje de error y el estado HTTP.

Ejercicio Práctico

Ejercicio

  1. Crea una aplicación Express que tenga las siguientes rutas:
    • GET /: Responde con "Página de inicio".
    • GET /about: Responde con "Acerca de nosotros".
    • GET /user/:name: Responde con "Hola, [name]".
    • POST /contact: Responde con "Formulario de contacto enviado".

Solución

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

app.get('/', (req, res) => {
  res.send('Página de inicio');
});

app.get('/about', (req, res) => {
  res.send('Acerca de nosotros');
});

app.get('/user/:name', (req, res) => {
  const userName = req.params.name;
  res.send(`Hola, ${userName}`);
});

app.post('/contact', (req, res) => {
  res.send('Formulario de contacto enviado');
});

app.listen(port, () => {
  console.log(`Servidor escuchando en http://localhost:${port}`);
});

Retroalimentación

  • Error Común: Olvidar definir el método HTTP correcto (GET, POST, etc.) para cada ruta.
    • Solución: Asegúrate de usar app.get, app.post, etc., según corresponda.
  • Consejo: Utiliza express.Router() para organizar mejor las rutas en aplicaciones más grandes.

Conclusión

En esta sección, has aprendido cómo definir y manejar rutas en Express.js, incluyendo rutas básicas, parámetros de ruta, rutas anidadas y manejo de errores. Estas habilidades son fundamentales para construir aplicaciones web robustas y bien estructuradas con Express. En el próximo módulo, exploraremos cómo trabajar con bases de datos y ORMs en Node.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

Módulo 5: NPM y Gestión de Paquetes

Módulo 6: Framework Express.js

Módulo 7: Bases de Datos y ORMs

Módulo 8: Autenticación y Autorización

Módulo 9: Pruebas y Depuración

Módulo 10: Temas Avanzados

Módulo 11: Despliegue y DevOps

Módulo 12: Proyectos del Mundo Real

© Copyright 2024. Todos los derechos reservados