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
users
con los camposname
yemail
. - 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
users
con 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