6-Middleware?

 

Middleware en Node.js con Express: Guía Definitiva

   5-EXPRESS
           |
          V
6-MIDDLEWARE

¿Qué es un Middleware?

mi-app/
├app.js
└── package.json

El middleware son funciones intermedias que procesan las solicitudes (req) y respuestas (res) en tu aplicación Express. Actúan como "puentes" entre la recepción de una petición y el envío de la respuesta final.

Flujo del Middleware


🔧 Tipos de Middleware

1. Middleware de Aplicación

Se ejecutan en todas las rutas:

javascript
Copy
Download
app.use((req, res, next) => {
  console.log('Middleware global');
  next(); // ¡No olvides next()!
});

2. Middleware de Ruta

Específicos para ciertas rutas:

javascript
Copy
Download
app.get('/ruta', (req, res, next) => {
  console.log('Middleware solo para /ruta');
  next();
});

3. Middleware de Terceros

Paquetes externos como body-parser:

javascript
Copy
Download
app.use(express.json()); // Para parsear JSON
app.use(express.urlencoded({ extended: true })); // Para formularios

4. Middleware de Manejo de Errores

Debe tener 4 parámetros:

javascript
Copy
Download
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('¡Algo salió mal!');
});

💡 Casos de Uso Comunes

1. Logging de Solicitudes

javascript
Copy
Download
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});

2. Autenticación Básica

javascript
Copy
Download
const authMiddleware = (req, res, next) => {
  const token = req.headers.authorization;
  if (token === 'miTokenSecreto') {
    next();
  } else {
    res.status(401).send('No autorizado');
  }
};

app.get('/admin', authMiddleware, (req, res) => {
  res.send('Panel de administración');
});

3. Validación de Datos

javascript
Copy
Download
app.post('/users', (req, res, next) => {
  if (!req.body.name) {
    return res.status(400).send('Nombre es requerido');
  }
  next(); // Si pasa la validación
});

4. Tiempo de Respuesta

javascript
Copy
Download
app.use((req, res, next) => {
  const start = Date.now();
  res.on('finish', () => {
    console.log(`Tiempo: ${Date.now() - start}ms`);
  });
  next();
});

⚙️ Cómo Funciona el next()

  • next(): Pasa al siguiente middleware.

  • `next('route'): Salta a la siguiente ruta coincidente.

  • next(err): Salta al middleware de errores.

javascript
Copy
Download
app.get('/example', (req, res, next) => {
  if (req.query.skip) next('route'); // Salta a otra ruta
  else next(); // Continúa normalmente
});

📌 Mejores Prácticas

  1. Orden Matters: Los middleware se ejecutan en el orden que se definen.

  2. Modulariza: Separa middleware en archivos:

    javascript
    Copy
    Download
    // middleware/auth.js
    module.exports = (req, res, next) => { /* ... */ };
    
    // app.js
    const auth = require('./middleware/auth');
    app.use(auth);
  3. Usa librerías existentes para tareas comunes:

    • helmet: Seguridad HTTP

    • morgan: Logging

    • cors: Habilitar CORS


🚀 Ejemplo Completo

javascript
Copy
Download
const express = require('express');
const app = express();

// Middleware global
app.use((req, res, next) => {
  console.log('Middleware 1');
  next();
});

// Middleware para una ruta
app.get('/special', (req, res, next) => {
  console.log('Middleware 2');
  next();
}, (req, res) => {
  res.send('Ruta especial');
});

// Middleware de errores
app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send('Error interno');
});

app.listen(3000);

🔍 ¿Por qué Usar Middleware?

✅ Reutilizar código (evita duplicación).
✅ Separar responsabilidades (lógica modular).
✅ Interceptar peticiones/respuestas (validar, transformar).


📚 Recursos Adicionales

Con este conocimiento, ¡puedes crear aplicaciones más robustas y organizadas! 

Comentarios

Entradas más populares de este blog

Lista de Tareas

9-Nuestra Primera Plantilla con EJS