6-Middleware?
Middleware en Node.js con Express: Guía Definitiva
¿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.
🔧 Tipos de Middleware
1. Middleware de Aplicación
Se ejecutan en todas las rutas:
app.use((req, res, next) => {
console.log('Middleware global');
next(); // ¡No olvides next()!
});
2. Middleware de Ruta
Específicos para ciertas rutas:
app.get('/ruta', (req, res, next) => {
console.log('Middleware solo para /ruta');
next();
});
3. Middleware de Terceros
Paquetes externos como body-parser
:
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:
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
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
2. Autenticación Básica
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
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
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.
app.get('/example', (req, res, next) => {
if (req.query.skip) next('route'); // Salta a otra ruta
else next(); // Continúa normalmente
});
📌 Mejores Prácticas
Orden Matters: Los middleware se ejecutan en el orden que se definen.
Modulariza: Separa middleware en archivos:
// middleware/auth.js module.exports = (req, res, next) => { /* ... */ }; // app.js const auth = require('./middleware/auth'); app.use(auth);
Usa librerías existentes para tareas comunes:
helmet
: Seguridad HTTPmorgan
: Loggingcors
: Habilitar CORS
🚀 Ejemplo Completo
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
Publicar un comentario