Trabajo con bases de datos en JavaScript: PostgreSQL y MongoDB en Node.js
El desarrollo web moderno en JavaScript es impensable sin una gestión eficiente de datos. Node.js, como plataforma de servidor, proporciona potentes herramientas para interactuar con varios sistemas de gestión de bases de datos (SGBD). En este artículo, analizaremos en detalle el trabajo con dos soluciones populares: la relacional PostgreSQL y la orientada a documentos MongoDB. Aprenderá cómo conectarse a estas bases de datos, realizar operaciones CRUD (crear, leer, actualizar, eliminar) y tomar una decisión informada entre ellas.
El material será útil tanto para desarrolladores principiantes que recién están aprendiendo backend en JavaScript, como para especialistas experimentados que deseen sistematizar sus conocimientos. Todos los ejemplos de código están escritos para el entorno de ejecución Node.js.
Preparación del entorno e instalación de drivers
Antes de comenzar a trabajar, es necesario instalar los paquetes correspondientes a través de npm. Para PostgreSQL se utiliza el driver pg, y para MongoDB, el driver oficial mongodb o la popular biblioteca ODM mongoose.
Cree un nuevo proyecto e instale las dependencias:
mkdir db-example && cd db-examplenpm init -ynpm install pg mongooseAhora su entorno está listo para experimentar. Asegúrese de que los servidores de bases de datos correspondientes estén ejecutándose en su máquina (PostgreSQL en el puerto 5432 y MongoDB en el puerto 27017).
1. Trabajo con PostgreSQL a través del driver pg
PostgreSQL es un potente SGBD relacional con soporte para SQL. Para interactuar con él en Node.js se utiliza el paquete pg, que proporciona tanto un pool de conexiones como un cliente individual.
Veamos un ejemplo básico de conexión y ejecución de consultas:
const { Pool } = require('pg');
// Configuración del pool de conexionesconst pool = new Pool({ user: 'postgres', host: 'localhost', database: 'testdb', password: 'your_password', port: 5432,});
// Función asíncrona para trabajar con la BDasync function runPostgresExample() { try { // Creación de la tabla await pool.query(` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INTEGER ); `);
// INSERT — inserción de datos const insertResult = await pool.query( 'INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING *', ['Iván Petrov', 'ivan@example.com', 30] ); console.log('Usuario agregado:', insertResult.rows[0]);
// SELECT — lectura de datos const selectResult = await pool.query('SELECT * FROM users'); console.log('Todos los usuarios:', selectResult.rows);
// UPDATE — actualización de datos await pool.query( 'UPDATE users SET age = $1 WHERE name = $2', [31, 'Iván Petrov'] ); console.log('Edad actualizada');
// DELETE — eliminación de datos await pool.query('DELETE FROM users WHERE name = $1', ['Iván Petrov']); console.log('Usuario eliminado'); } catch (err) { console.error('Error de PostgreSQL:', err.message); } finally { await pool.end(); }}
runPostgresExample();Tenga en cuenta el uso de consultas parametrizadas con los placeholders $1, $2, etc. Esto protege contra inyecciones SQL y es una buena práctica. Se recomienda el pool de conexiones para entornos de producción, ya que gestiona las conexiones de manera eficiente.
2. Trabajo con MongoDB a través de Mongoose
MongoDB es una base de datos NoSQL que almacena datos en un formato similar a JSON (BSON). Mongoose proporciona una abstracción conveniente con esquemas, validación y métodos para trabajar con colecciones.
Ejemplo de conexión y operaciones CRUD con Mongoose:
const mongoose = require('mongoose');
// Definición del esquema de usuarioconst