Rutas y Middlewares en Express.js:
En Express.js, las rutas son responsables de definir cómo responde la aplicación a solicitudes HTTP específicas.
Los middlewares, por otro lado, son funciones que tienen acceso tanto a la solicitud como a la respuesta y pueden ejecutar acciones antes de que se envíe la respuesta final.
Ejemplo de Rutas:
Considera una aplicación de tareas simple. Aquí tienes ejemplos de rutas básicas usando Express.js:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
// Ruta para obtener todas las tareas
app.get('/tasks', (req, res) => {
// Lógica para obtener y enviar todas las tareas
res.send('Listando todas las tareas');
});
// Ruta para obtener una tarea específica
app.get('/tasks/:taskId', (req, res) => {
const taskId = req.params.taskId;
// Lógica para obtener y enviar la tarea con taskId
res.send(`Detalles de la tarea ${taskId}`);
});
// Ruta para crear una nueva tarea
app.post('/tasks', (req, res) => {
// Lógica para crear una nueva tarea
res.send('Creando una nueva tarea');
});
// Ruta para actualizar una tarea existente
app.put('/tasks/:taskId', (req, res) => {
const taskId = req.params.taskId;
// Lógica para actualizar la tarea con taskId
res.send(`Actualizando la tarea ${taskId}`);
});
// Ruta para eliminar una tarea
app.delete('/tasks/:taskId', (req, res) => {
const taskId = req.params.taskId;
// Lógica para eliminar la tarea con taskId
res.send(`Eliminando la tarea ${taskId}`);
});
app.listen(PORT, () => {
console.log(`Servidor ejecutándose en el puerto ${PORT}`);
});
En este ejemplo, creamos rutas para listar todas las tareas, obtener detalles de una tarea específica, crear una nueva tarea, actualizar una tarea existente y eliminar una tarea.
Ejemplo de Middlewares:
Los middlewares son funciones que tienen acceso al objeto de solicitud (req
), al objeto de respuesta (res
) y a la siguiente función de middleware en el ciclo de solicitud-respuesta de Express. Pueden utilizarse para realizar tareas como autenticación, validación de datos, manejo de errores, entre otros.
// Middleware para autenticación simple
const authenticate = (req, res, next) => {
const authToken = req.headers.authorization;
if (!authToken) {
return res.status(401).send('Token de autenticación no proporcionado');
}
// Lógica de autenticación aquí (verificación de token, por ejemplo)
next(); // Llama al siguiente middleware en la pila
};
// Middleware para registro de solicitudes
const logRequest = (req, res, next) => {
console.log(`[${new Date().toLocaleString()}] ${req.method} ${req.url}`);
next();
};
// Uso de middlewares en rutas específicas
app.use(logRequest); // Aplica el middleware de registro a todas las rutas
app.get('/tasks', authenticate, (req, res) => {
// Lógica para obtener y enviar todas las tareas
res.send('Listando todas las tareas');
});
app.listen(PORT, () => {
console.log(`Servidor ejecutándose en el puerto ${PORT}`);
});
En este ejemplo, creamos dos middlewares. El primero, authenticate
, verifica la presencia de un token de autenticación. El segundo, logRequest
, registra información sobre cada solicitud en la consola. Ambos se utilizan en rutas específicas.
Estos son conceptos fundamentales para crear aplicaciones robustas y flexibles con Express.js.
app.use
o incluyéndolos directamente como argumentos en rutas específicas.next()
se utiliza para pasar el control al siguiente middleware en el encadenamiento.
app.get('/ruta', middleware1, middleware2, (req, res) => {
// Lógica de la ruta
});
Middlewares Globales:
app.use
. Estos middlewares se ejecutarán en todas las rutas.
app.use(middlewareGlobal);