Node.js y ExpressExpress.jsLección 7 de 20
Middleware en Profundidad
El middleware es una función que recibe (req, res, next) y puede modificar la petición, la respuesta, o pasar el control al siguiente middleware con next(). Express procesa los middlewares en orden, formando una cadena. Esta arquitectura hace que Express sea extremadamente extensible.
const express = require('express');
const cors = require('cors'); // npm install cors
const app = express();
// Middlewares globales (aplican a TODAS las rutas)
app.use(cors({ origin: 'https://miapp.com' })); // permite peticiones cross-origin
app.use(express.json({ limit: '10mb' })); // parsea JSON body
app.use(express.urlencoded({ extended: true })); // parsea form data
app.use(express.static('public')); // sirve archivos estáticos
// Middleware personalizado de logging
const logger = (req, res, next) => {
const inicio = Date.now();
console.log(`→ ${req.method} ${req.url}`);
// Interceptar cuando la respuesta termine
res.on('finish', () => {
const ms = Date.now() - inicio;
console.log(`← ${res.statusCode} ${req.url} (${ms}ms)`);
});
next(); // ¡NUNCA olvides llamar next()!
};
app.use(logger);
// Middleware de autenticación básica
const verificarToken = (req, res, next) => {
const auth = req.headers.authorization;
if (!auth || !auth.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Token requerido' });
}
req.token = auth.split(' ')[1]; // pasar datos al siguiente middleware
next();
};
// Aplicar solo a rutas específicas
app.get('/perfil', verificarToken, (req, res) => {
res.json({ token: req.token });
});
// Middleware de manejo de errores (4 parámetros: err, req, res, next)
// DEBE ir al FINAL, después de todas las rutas
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(err.status || 500).json({
error: err.message || 'Error interno del servidor'
});
});
app.listen(3000);
ConsejoEl middleware de manejo de errores DEBE tener exactamente 4 parámetros (err, req, res, next). Si tiene 3, Express lo trata como middleware normal y los errores no llegarán a él.
Practica esta lección
Resuelve los ejercicios del curso de Node.js y Express en la app, gratis y con corrección automática.
Empezar a practicar