En este módulo, aprenderemos sobre las bases de datos y cómo integrarlas con aplicaciones Node.js. Las bases de datos son fundamentales para almacenar y gestionar datos de manera eficiente. Existen diferentes tipos de bases de datos, cada una con sus propias características y casos de uso.
Conceptos Clave
- Base de Datos: Un sistema organizado para almacenar, gestionar y recuperar datos.
- SQL (Structured Query Language): Un lenguaje estándar para gestionar bases de datos relacionales.
- NoSQL: Un término que se refiere a bases de datos no relacionales, diseñadas para manejar grandes volúmenes de datos no estructurados.
- ORM (Object-Relational Mapping): Una técnica que permite interactuar con bases de datos relacionales utilizando lenguajes de programación orientados a objetos.
Tipos de Bases de Datos
Bases de Datos Relacionales (SQL)
- Ejemplos: MySQL, PostgreSQL, SQLite
- Características:
- Estructura basada en tablas.
- Relaciones entre tablas mediante claves primarias y foráneas.
- Uso de SQL para consultas y manipulación de datos.
Bases de Datos No Relacionales (NoSQL)
- Ejemplos: MongoDB, Cassandra, Redis
- Características:
- Estructura flexible (documentos, grafos, pares clave-valor).
- Escalabilidad horizontal.
- No requieren un esquema fijo.
Comparación entre SQL y NoSQL
| Característica | SQL | NoSQL |
|---|---|---|
| Estructura | Tablas | Documentos, grafos, etc. |
| Esquema | Fijo | Flexible |
| Escalabilidad | Vertical | Horizontal |
| Consultas | SQL | Varía según la base de datos |
| Transacciones | ACID | BASE |
Integración con Node.js
Node.js puede interactuar con diferentes tipos de bases de datos mediante módulos y bibliotecas específicas. A continuación, veremos cómo trabajar con MongoDB y MySQL, dos de las bases de datos más populares.
MongoDB
MongoDB es una base de datos NoSQL orientada a documentos. Utiliza documentos JSON para almacenar datos, lo que la hace muy flexible y fácil de usar con aplicaciones JavaScript.
Instalación de MongoDB y Mongoose
Mongoose es una biblioteca de Node.js que proporciona una solución basada en esquemas para modelar datos en MongoDB.
Conexión a MongoDB
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB');
});MySQL
MySQL es una base de datos relacional ampliamente utilizada. Para interactuar con MySQL en Node.js, podemos usar el módulo mysql.
Instalación del Módulo MySQL
Conexión a MySQL
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydatabase'
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL:', err.stack);
return;
}
console.log('Connected to MySQL as id ' + connection.threadId);
});Ejercicio Práctico
Ejercicio 1: Conectar a una Base de Datos MongoDB
- Instala MongoDB y Mongoose.
- Crea una conexión a una base de datos MongoDB llamada
testdb. - Define un esquema y un modelo para una colección llamada
userscon los camposnameyemail. - Inserta un documento en la colección
users.
Solución
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/testdb', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB');
const userSchema = new mongoose.Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
const newUser = new User({ name: 'John Doe', email: '[email protected]' });
newUser.save((err) => {
if (err) return console.error(err);
console.log('User saved successfully');
});
});Ejercicio 2: Conectar a una Base de Datos MySQL
- Instala MySQL y el módulo
mysql. - Crea una conexión a una base de datos MySQL llamada
testdb. - Crea una tabla llamada
userscon los camposid,name, yemail. - Inserta un registro en la tabla
users.
Solución
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'testdb'
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL:', err.stack);
return;
}
console.log('Connected to MySQL as id ' + connection.threadId);
const createTableQuery = `
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
)
`;
connection.query(createTableQuery, (err, results, fields) => {
if (err) throw err;
console.log('Table created or already exists');
const insertUserQuery = `
INSERT INTO users (name, email)
VALUES ('John Doe', '[email protected]')
`;
connection.query(insertUserQuery, (err, results, fields) => {
if (err) throw err;
console.log('User inserted successfully');
connection.end();
});
});
});Conclusión
En esta sección, hemos introducido los conceptos básicos de las bases de datos y cómo integrarlas con Node.js. Hemos explorado tanto bases de datos relacionales (SQL) como no relacionales (NoSQL), y hemos visto ejemplos prácticos de cómo conectarse a MongoDB y MySQL desde una aplicación Node.js. En el próximo módulo, profundizaremos en el uso de MongoDB con Mongoose y bases de datos SQL con Sequelize para realizar operaciones CRUD.
Curso de Node.js
Módulo 1: Introducción a Node.js
Módulo 2: Conceptos Básicos
Módulo 3: Sistema de Archivos y E/S
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Sirviendo Archivos Estáticos
- Enrutamiento
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM
- Instalación y Uso de Paquetes
- Creación y Publicación de Paquetes
- Versionado Semántico
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Middleware
- Enrutamiento en Express
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Usando Bases de Datos SQL con Sequelize
- Operaciones CRUD
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Usando Passport.js
- Autenticación JWT
- Control de Acceso Basado en Roles
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Pruebas de Integración
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- Módulo Cluster
- Hilos de Trabajo
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Variables de Entorno
- Usando PM2 para la Gestión de Procesos
- Desplegando en Heroku
- Integración y Despliegue Continuos
