En este tema, aprenderemos sobre las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en el contexto de bases de datos utilizando Node.js. CRUD es un acrónimo que representa las cuatro operaciones básicas que se pueden realizar en una base de datos. Estas operaciones son fundamentales para cualquier aplicación que maneje datos.
Objetivos del Tema
- Comprender qué son las operaciones CRUD.
- Implementar operaciones CRUD utilizando MongoDB con Mongoose.
- Implementar operaciones CRUD utilizando una base de datos SQL con Sequelize.
- Realizar ejemplos prácticos de cada operación.
Conceptos Clave
¿Qué son las Operaciones CRUD?
- Crear (Create): Añadir nuevos registros a la base de datos.
- Leer (Read): Recuperar datos de la base de datos.
- Actualizar (Update): Modificar registros existentes en la base de datos.
- Eliminar (Delete): Borrar registros de la base de datos.
Herramientas Utilizadas
- MongoDB y Mongoose: Para bases de datos NoSQL.
- SQL y Sequelize: Para bases de datos SQL.
Implementación con MongoDB y Mongoose
Configuración Inicial
Primero, asegúrate de tener MongoDB instalado y ejecutándose. Luego, instala Mongoose en tu proyecto Node.js:
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'); });
Definición del Esquema y Modelo
const Schema = mongoose.Schema; const userSchema = new Schema({ name: String, email: String, age: Number }); const User = mongoose.model('User', userSchema);
Operaciones CRUD
Crear (Create)
const newUser = new User({ name: 'John Doe', email: '[email protected]', age: 30 }); newUser.save((err, user) => { if (err) return console.error(err); console.log('User created:', user); });
Leer (Read)
User.find({}, (err, users) => { if (err) return console.error(err); console.log('Users:', users); });
Actualizar (Update)
User.updateOne({ name: 'John Doe' }, { age: 31 }, (err, res) => { if (err) return console.error(err); console.log('User updated:', res); });
Eliminar (Delete)
User.deleteOne({ name: 'John Doe' }, (err) => { if (err) return console.error(err); console.log('User deleted'); });
Implementación con SQL y Sequelize
Configuración Inicial
Primero, asegúrate de tener una base de datos SQL (como MySQL o PostgreSQL) instalada y ejecutándose. Luego, instala Sequelize y el conector de tu base de datos:
Conexión a la Base de Datos
const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', dialect: 'mysql' // o 'postgres' }); sequelize.authenticate() .then(() => { console.log('Connection has been established successfully.'); }) .catch(err => { console.error('Unable to connect to the database:', err); });
Definición del Modelo
const User = sequelize.define('User', { name: { type: DataTypes.STRING, allowNull: false }, email: { type: DataTypes.STRING, allowNull: false }, age: { type: DataTypes.INTEGER, allowNull: false } }, { // Other model options go here }); sequelize.sync() .then(() => { console.log('User table has been created.'); });
Operaciones CRUD
Crear (Create)
User.create({ name: 'Jane Doe', email: '[email protected]', age: 25 }).then(user => { console.log('User created:', user); });
Leer (Read)
Actualizar (Update)
User.update({ age: 26 }, { where: { name: 'Jane Doe' } }).then(() => { console.log('User updated'); });
Eliminar (Delete)
Ejercicios Prácticos
Ejercicio 1: CRUD con Mongoose
- Crea un nuevo esquema y modelo para un "Producto" con los campos
nombre
,precio
ycategoría
. - Implementa las operaciones CRUD para el modelo "Producto".
Ejercicio 2: CRUD con Sequelize
- Define un nuevo modelo "Orden" con los campos
producto
,cantidad
yprecioTotal
. - Implementa las operaciones CRUD para el modelo "Orden".
Soluciones
Solución Ejercicio 1
const productSchema = new Schema({ nombre: String, precio: Number, categoria: String }); const Product = mongoose.model('Product', productSchema); // Crear const newProduct = new Product({ nombre: 'Laptop', precio: 1000, categoria: 'Electronics' }); newProduct.save((err, product) => { if (err) return console.error(err); console.log('Product created:', product); }); // Leer Product.find({}, (err, products) => { if (err) return console.error(err); console.log('Products:', products); }); // Actualizar Product.updateOne({ nombre: 'Laptop' }, { precio: 900 }, (err, res) => { if (err) return console.error(err); console.log('Product updated:', res); }); // Eliminar Product.deleteOne({ nombre: 'Laptop' }, (err) => { if (err) return console.error(err); console.log('Product deleted'); });
Solución Ejercicio 2
const Order = sequelize.define('Order', { producto: { type: DataTypes.STRING, allowNull: false }, cantidad: { type: DataTypes.INTEGER, allowNull: false }, precioTotal: { type: DataTypes.FLOAT, allowNull: false } }, { // Other model options go here }); sequelize.sync() .then(() => { console.log('Order table has been created.'); }); // Crear Order.create({ producto: 'Laptop', cantidad: 2, precioTotal: 2000 }).then(order => { console.log('Order created:', order); }); // Leer Order.findAll().then(orders => { console.log('Orders:', orders); }); // Actualizar Order.update({ cantidad: 3 }, { where: { producto: 'Laptop' } }).then(() => { console.log('Order updated'); }); // Eliminar Order.destroy({ where: { producto: 'Laptop' } }).then(() => { console.log('Order deleted'); });
Conclusión
En esta sección, hemos aprendido a realizar operaciones CRUD utilizando MongoDB con Mongoose y una base de datos SQL con Sequelize. Estas operaciones son fundamentales para cualquier aplicación que maneje datos. Asegúrate de practicar estos conceptos y aplicarlos en tus proyectos para consolidar tu comprensión.
En el próximo módulo, exploraremos la autenticación y autorización en aplicaciones Node.js, lo cual es crucial para la seguridad de tus aplicaciones.
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