Express: Database

Aprende a integrar bases de datos en Express 5 con patrones de conexión, middleware y optimización para aplicaciones web escalables.

Aprende Express GRATIS y certifícate

Integración de bases de datos en Express

La gestión de datos constituye uno de los pilares fundamentales en el desarrollo de aplicaciones web modernas. Express 5 proporciona un ecosistema robusto para la integración con diferentes sistemas de bases de datos, permitiendo a los desarrolladores construir aplicaciones escalables y eficientes.

Arquitectura de datos en Express

Express adopta un enfoque agnóstico respecto a las bases de datos, lo que significa que no impone restricciones sobre qué sistema de gestión de datos utilizar. Esta flexibilidad permite integrar desde bases de datos relacionales tradicionales como PostgreSQL y MySQL, hasta soluciones NoSQL como MongoDB o Redis.

La separación de responsabilidades es clave en Express 5. El framework se encarga del enrutado, middleware y gestión de peticiones HTTP, mientras que las operaciones de base de datos se delegan a bibliotecas especializadas que actúan como drivers o ODM/ORM.

// Estructura típica de una aplicación Express con base de datos
const express = require('express');
const app = express();

// Middleware para parsing de JSON
app.use(express.json());

// Rutas que interactúan con la base de datos
app.get('/users', async (req, res) => {
  // Lógica de consulta a la base de datos
});

app.listen(3000);

Patrones de conexión y configuración

Express 5 facilita la implementación de patrones de conexión eficientes mediante la configuración centralizada de la base de datos. El patrón más común consiste en establecer la conexión durante el arranque de la aplicación y reutilizar esa conexión a través de un pool de conexiones.

// Configuración de conexión centralizada
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  port: process.env.DB_PORT || 5432,
  database: process.env.DB_NAME || 'myapp',
  user: process.env.DB_USER || 'admin',
  password: process.env.DB_PASSWORD
};

La gestión de variables de entorno se vuelve crucial para mantener la seguridad y flexibilidad de las configuraciones de base de datos. Express 5 se integra perfectamente con bibliotecas como dotenv para cargar configuraciones desde archivos .env.

Middleware de base de datos

Los middleware personalizados en Express 5 permiten encapsular la lógica de conexión y hacer que esté disponible en todas las rutas. Este patrón mejora la reutilización del código y centraliza la gestión de errores de conexión.

// Middleware personalizado para inyección de base de datos
const dbMiddleware = (db) => {
  return (req, res, next) => {
    req.db = db;
    next();
  };
};

app.use(dbMiddleware(database));

// Uso en rutas
app.get('/products', async (req, res) => {
  try {
    const products = await req.db.query('SELECT * FROM products');
    res.json(products);
  } catch (error) {
    res.status(500).json({ error: 'Database error' });
  }
});

Gestión de transacciones

Express 5 facilita la implementación de transacciones de base de datos mediante el uso de middleware asíncrono. Las transacciones garantizan la consistencia de los datos cuando se realizan múltiples operaciones que deben ejecutarse como una unidad atómica.

// Middleware para manejo de transacciones
const transactionMiddleware = async (req, res, next) => {
  const transaction = await req.db.beginTransaction();
  req.transaction = transaction;
  
  res.on('finish', async () => {
    if (res.statusCode >= 400) {
      await transaction.rollback();
    } else {
      await transaction.commit();
    }
  });
  
  next();
};

Validación y sanitización de datos

La validación de entrada es esencial antes de interactuar con la base de datos. Express 5 se integra eficientemente con bibliotecas de validación que permiten definir esquemas de datos y validar automáticamente las peticiones entrantes.

// Validación de datos antes de inserción
app.post('/users', validateUser, async (req, res) => {
  const { name, email, age } = req.body;
  
  try {
    const newUser = await req.db.users.create({
      name: name.trim(),
      email: email.toLowerCase(),
      age: parseInt(age)
    });
    
    res.status(201).json(newUser);
  } catch (error) {
    res.status(400).json({ error: 'Invalid user data' });
  }
});

Optimización de consultas

Express 5 permite implementar estrategias de optimización para mejorar el rendimiento de las consultas a la base de datos. Esto incluye técnicas como el uso de índices, consultas preparadas y caching de resultados frecuentemente solicitados.

La paginación es otra técnica fundamental que Express facilita mediante parámetros de consulta que se traducen en límites y offsets en las consultas SQL.

// Implementación de paginación
app.get('/posts', async (req, res) => {
  const page = parseInt(req.query.page) || 1;
  const limit = parseInt(req.query.limit) || 10;
  const offset = (page - 1) * limit;
  
  const posts = await req.db.query(
    'SELECT * FROM posts ORDER BY created_at DESC LIMIT ? OFFSET ?',
    [limit, offset]
  );
  
  res.json({
    posts,
    pagination: { page, limit, hasMore: posts.length === limit }
  });
});

Manejo de errores de base de datos

Express 5 proporciona mecanismos robustos para el manejo de errores específicos de base de datos. Los middleware de error pueden capturar excepciones de conexión, violaciones de restricciones y otros errores relacionados con la persistencia de datos.

// Middleware especializado en errores de base de datos
const dbErrorHandler = (error, req, res, next) => {
  if (error.code === 'ER_DUP_ENTRY') {
    return res.status(409).json({ error: 'Duplicate entry' });
  }
  
  if (error.code === 'ER_NO_REFERENCED_ROW') {
    return res.status(400).json({ error: 'Invalid reference' });
  }
  
  next(error);
};

app.use(dbErrorHandler);

La integración de bases de datos en Express 5 se caracteriza por su flexibilidad y escalabilidad, permitiendo a los desarrolladores elegir las herramientas más adecuadas para cada proyecto mientras mantienen un código limpio y mantenible.

Empezar curso de Express

Lecciones de este módulo de Express

Lecciones de programación del módulo Database del curso de Express.

Ejercicios de programación en este módulo de Express

Evalúa tus conocimientos en Database con ejercicios de programación Database de tipo Test, Puzzle, Código y Proyecto con VSCode.