Express JS
Express.js es un framework minimalista y flexible para Node.js que proporciona un conjunto robusto de características para desarrollar aplicaciones web y APIs. Es ampliamente utilizado debido a su simplicidad y extensibilidad. A continuación, se presenta una visión detallada de la teoría de operación de Express.js.
Teoría de Operación de Express.js
1. Arquitectura Basada en Middleware
Express utiliza un patrón de arquitectura basado en middleware, donde funciones intermedias (middleware) procesan peticiones y respuestas. Cada middleware puede modificar la petición y la respuesta o terminar el ciclo de petición/respuesta. Esto permite agregar funcionalidades de forma modular.
Estructura de un Middleware
Un middleware es una función que recibe tres parámetros: req (petición), res (respuesta) y next (una función que pasa el control al siguiente middleware).
const miMiddleware = (req, res, next) => {
console.log('¡Petición recibida!');
next(); // Llama al siguiente middleware
};
2. Instalación y Configuración
Para iniciar un proyecto con Express, necesitas instalar la librería y crear una instancia de la aplicación.
npm install express
const express = require('express');
const app = express();
3. Enrutamiento
Express permite definir rutas para diferentes endpoints de la aplicación. Las rutas pueden responder a diferentes métodos HTTP, como GET, POST, PUT y DELETE.
Ejemplo de Enrutamiento
app.get('/usuarios', (req, res) => {
res.send('Lista de usuarios');
});
app.post('/usuarios', (req, res) => {
res.send('Usuario creado');
});
4. Manejo de Peticiones y Respuestas
Express simplifica el trabajo con los objetos de petición y respuesta, permitiéndote acceder a los datos de la petición (como parámetros, cuerpo y encabezados) y enviar respuestas de forma fácil.
Acceso a Parámetros y Cuerpo de la Petición
app.get('/usuarios/:id', (req, res) => {
const usuarioId = req.params.id; // Acceso a parámetros de la URL
res.send(`Usuario con ID: ${usuarioId}`);
});
// Para manejar el cuerpo de la petición, es necesario usar un middleware como body-parser
app.use(express.json());
app.post('/usuarios', (req, res) => {
const nuevoUsuario = req.body; // Acceso al cuerpo de la petición
res.send(`Usuario creado: ${JSON.stringify(nuevoUsuario)}`);
});
5. Middleware
Los middlewares son esenciales en Express, permitiendo agregar funcionalidades como autenticación, manejo de errores, logging, entre otros.
Ejemplo de Middleware de Registro
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // Pasa al siguiente middleware
});
6. Manejo de Errores
Express permite definir middlewares específicos para el manejo de errores. Un middleware de error debe tener cuatro parámetros: err, req, res, y next.
Ejemplo de Middleware de Manejo de Errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('¡Algo salió mal!');
});
7. Sirviendo Archivos Estáticos
Express puede servir archivos estáticos (como HTML, CSS y JavaScript) utilizando el middleware express.static.
Ejemplo de Servir Archivos Estáticos
app.use(express.static('public'));
8. Conexión con Bases de Datos
Express puede conectarse a bases de datos, como MongoDB, MySQL, etc., utilizando librerías apropiadas y middlewares para ejecutar operaciones CRUD.
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mibanco', { useNewUrlParser: true });
9. Aplicaciones en Tiempo Real
Express puede ser utilizado en conjunto con librerías como Socket.io para crear aplicaciones en tiempo real, permitiendo la comunicación bidireccional entre el cliente y el servidor.
10. Despliegue
Una aplicación de Express puede ser desplegada en diferentes entornos, como servidores dedicados, servicios en la nube (como Heroku, AWS) o contenedores de Docker, lo que la hace altamente flexible.