Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación de Middleware Personalizado | Desarrollo de Aplicaciones Web con Express.js
Desarrollo Backend con Node.js y Express.js

Creación de Middleware Personalizado

Desliza para mostrar el menú

En Express.js, es posible crear funciones de middleware personalizadas utilizando el método app.use(). Estas funciones reciben tres parámetros: req (el objeto de solicitud), res (el objeto de respuesta) y next (una función para pasar el control al siguiente middleware en la cadena). El middleware personalizado puede aplicarse globalmente a todas las rutas o a rutas específicas especificando una ruta concreta.

Creación de middleware personalizado

Ejemplo básico de una función de middleware personalizada que registra la marca de tiempo y la URL de cada solicitud entrante:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

En este ejemplo, el middleware personalizado registra la marca de tiempo y la URL de cada solicitud entrante en la consola. Se llama a la función next() para pasar el control al siguiente middleware en la cadena.

Ejemplo real: combinación de middleware integrado y personalizado

Ejemplo práctico en el que se utiliza un middleware integrado de Express para analizar datos JSON y luego se crea un middleware personalizado para validar esos datos antes de continuar:

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

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

En este ejemplo:

  • Se utiliza el middleware integrado express.json() para analizar los datos JSON entrantes;
  • Se crea un middleware personalizado que verifica si los datos JSON analizados están ausentes o vacíos. Si es así, envía una respuesta 400 Bad Request con un mensaje de error. Si los datos son válidos, llama a next() para continuar con la ruta;
  • La ruta /api/data espera datos JSON válidos. Si el middleware personalizado valida los datos, el controlador de la ruta los recibe y envía una respuesta de éxito.
Descripción del código
expand arrow
  • Línea 1: importa el framework Express.js;

  • Línea 2: crea una instancia de aplicación Express llamando a express(). El objeto app resultante se utiliza para definir rutas, middleware y manejar solicitudes HTTP;

  • Línea 5: habilita el middleware incorporado express.json(). Este middleware analiza automáticamente los cuerpos de las solicitudes JSON entrantes y pone los datos a disposición a través de req.body;

  • Líneas 8-18: definen un middleware personalizado utilizado para validar los datos JSON entrantes;

  • verifica si req.body contiene datos;

  • devuelve una respuesta 400 Bad Request si el cuerpo de la solicitud falta o está vacío;

  • llama a next() si los datos JSON son válidos y continúa al siguiente middleware o manejador de ruta;

  • Líneas 21-24: definen una ruta POST en /api/data;

  • recupera los datos JSON enviados desde req.body;

  • devuelve una respuesta 200 OK que contiene un mensaje de confirmación y los datos recibidos;

  • Líneas 26-28: inicia la aplicación Express y comienza a escuchar solicitudes en el puerto 3000.

Este ejemplo demuestra cómo se pueden utilizar tanto middleware incorporados como personalizados para validar datos antes de que lleguen a los manejadores de rutas, asegurando que los datos estén en el formato esperado antes de procesarlos.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 9

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 3. Capítulo 9
some-alt