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:

npm install mongoose

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:

npm install sequelize
npm install mysql2  # o pg para PostgreSQL

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)

User.findAll().then(users => {
  console.log('Users:', users);
});

Actualizar (Update)

User.update({ age: 26 }, {
  where: {
    name: 'Jane Doe'
  }
}).then(() => {
  console.log('User updated');
});

Eliminar (Delete)

User.destroy({
  where: {
    name: 'Jane Doe'
  }
}).then(() => {
  console.log('User deleted');
});

Ejercicios Prácticos

Ejercicio 1: CRUD con Mongoose

  1. Crea un nuevo esquema y modelo para un "Producto" con los campos nombre, precio y categoría.
  2. Implementa las operaciones CRUD para el modelo "Producto".

Ejercicio 2: CRUD con Sequelize

  1. Define un nuevo modelo "Orden" con los campos producto, cantidad y precioTotal.
  2. 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

Módulo 5: NPM y Gestión de Paquetes

Módulo 6: Framework Express.js

Módulo 7: Bases de Datos y ORMs

Módulo 8: Autenticación y Autorización

Módulo 9: Pruebas y Depuración

Módulo 10: Temas Avanzados

Módulo 11: Despliegue y DevOps

Módulo 12: Proyectos del Mundo Real

© Copyright 2024. Todos los derechos reservados