Published on

Cómo usar una base de datos MySQL con Node.js: Guía Completa

Authors

Si estás buscando una forma de integrar una base de datos MySQL en tu aplicación Node.js, estás en el lugar correcto. En este artículo, te mostraremos paso a paso cómo hacerlo de manera efectiva, desde la instalación hasta las consultas SQL más comunes. ¡Vamos a empezar!

¿Por qué elegir MySQL con Node.js?

MySQL con Node.Js MySQL es uno de los sistemas de gestión de bases de datos más populares debido a su fiabilidad, escalabilidad y facilidad de uso. Cuando lo combinas con Node.js, un entorno de ejecución rápido y eficiente, obtienes una solución potente para aplicaciones web y móviles. Veamos por qué es una excelente elección:

  • Rendimiento rápido: Node.js maneja múltiples conexiones simultáneas eficientemente.
  • Ampliamente soportado: La comunidad de desarrolladores de Node.js y MySQL es enorme.
  • Escalabilidad: Ideal para aplicaciones que requieren crecimiento en el tiempo.

Requisitos previos

Antes de comenzar, asegúrate de tener instalados los siguientes elementos:

  • Node.js: Si aún no lo tienes, puedes descargarlo desde su página oficial.
  • MySQL: Instala MySQL desde aquí.
  • Docker (opcional): Si prefieres usar un contenedor de Docker para MySQL, puedes hacerlo. Aquí tienes más información.
  • Administrador de paquetes NPM: Node.js incluye npm, lo que facilita la instalación de dependencias.
  • Table Plus (opcional) o cualquier otro cliente de MySQL para visualizar y administrar la base de datos.

Iniciar proyecto en Nodejs

primero debemos crear nuestra carpeta y iniciar el siguiente comando

npm init -y

ahora crearemos nuestra estructura de carpetas estructura de carpetas en este caso index.js para nuestro archivo principal y docker compose para la configuracion de nuestra base de datos en docker si no queremos instalar mysql en nuestra maquina recuerda que debes tener instalado docker DeskTop en tu PC instlar docker

Iniciar Mysql con Docker

en el archivo docker-compose.yml debemos tener el siguiente codigo

version: '3.8'

services:
  mysql:
    image: mysql:latest
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: my_database
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    ports:
      - '3306:3306'
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - mysql_network

volumes:
  mysql-data:

networks:
  mysql_network:
    driver: bridge

con este codigo definiremos el usuario y contraseña de nuestra base de datos y el nombre de la base de datos que vamos a usar en este caso my_database y el puerto que vamos a usar en este caso 3306 par que funcione debemos tener abierto nuestro DockerDestop y ejecutar el siguiente comando en la terminal

docker-compose up -d

una vez que lo corras de deberia descargar la imagen en docker y iniciar el contenedor de mysql y ya tendriamos nuestra base de datos corriendo en nuestro localhost:3306 docker aca podras ver tu contenedor corriendo en docker y en caso de error podras ver el log de tu contenedor el error mas comun que me pasa es tener instlado mysql en mi pc con el puerto por defecto 3306 y no poder usarlo en docker para solucionar esto debes detener el servicio de mysql en tu pc y volver a correr el docker-compose up -d

Comprobar la base de datos (opcional)

para comprobar que la base de datos este corriendo perfectamente vamos a usar Table Plus o cualquier otro cliente de MySQL para conectarnos a nuestra base de datos. primero debemos crear una nueva conexion en Table Plus y usaremos los datos que definimos en el docker-compose.yml para conectarnos a nuestra base de datos conexion table plus una vez que inicies podras ver tu base de datos corriendo perfectamente base de datos aca podemos administrar nuestra base de datos y tablas desde una interfaz grafica

ahora si a conectar mysql con nodejs

Instalación de MySQL y el paquete mysql2

En primer lugar, debes instalar el paquete que te permitirá interactuar con MySQL desde Node.js. El paquete recomendado es mysql2, que es una versión mejorada del paquete mysql original.

npm install mysql2

Conexión a la base de datos

Una vez instalada la dependencia, es hora de conectar tu aplicación Node.js a MySQL. Aquí te mostramos cómo hacerlo: en el archivo index.js debemos tener el siguiente codigo

const mysql = require('mysql2')

// Crear una conexión a la base de datos
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'user',
  password: 'userpassword',
  database: 'my_database',
})

// Conectar a la base de datos
connection.connect((err) => {
  if (err) {
    console.error('Error al conectar a la base de datos: ' + err.stack)
    return
  }
  console.log('Conexión exitosa a la base de datos con el ID: ' + connection.threadId)
})

Iniciar el servidor de Node.js Con nodemon

para este paso iniciaremos el servidor usando nodemon para que cada vez que hagamos un cambio en nuestro codigo se reinicie el servidor automaticamente para instalar nodemon debemos ejecutar el siguiente comando en la terminal

npm install nodemon -d

iniciar nuestro servidor con el siguiente comando

npx nodemon src/index.js

una vez que tengas ya todo corriendo podras ver en la terminal que se conecto a la base de datos y podras ver el id de la conexion

conexion exitosa

Operaciones básicas con MySQL

Ahora que tienes la conexión establecida, puedes comenzar a realizar operaciones sobre tu base de datos. Empecemos con una de las operaciones más comunes: insertar datos.

crear tabla en la base de datos

para crear una tabla en la base de datos debemos tener el siguiente codigo en nuestro index.js

const sql = `
CREATE TABLE IF NOT EXISTS usuarios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL
)
`
connection.query(sql, (err, result) => {
  if (err) {
    console.error('Error al crear la tabla: ' + err)
    return
  }
  console.log('Tabla creada correctamente: ', result)
})

Insertar datos en la base de datos

const sql = 'INSERT INTO usuarios (nombre, email) VALUES (?, ?)'
connection.execute(sql, ['Juan Pérez', 'juan@example.com'], (err, result) => {
  if (err) {
    console.error('Error al insertar datos: ' + err)
    return
  }
  console.log('Datos insertados correctamente: ', result)
})

Consultar datos

Una vez que tengas datos en la base de datos, puedes realizar consultas para obtenerlos. Aquí te mostramos cómo hacer una consulta simple:

const sql = 'SELECT * FROM usuarios'
connection.execute(sql, (err, results) => {
  if (err) {
    console.error('Error al consultar datos: ' + err)
    return
  }
  console.log('Resultados de la consulta: ', results)
})

Actualizar datos

También puedes actualizar registros en la base de datos usando una consulta SQL:

const sql = 'UPDATE usuarios SET email = ? WHERE nombre = ?'
connection.execute(sql, ['nuevoemail@example.com', 'Juan Pérez'], (err, result) => {
  if (err) {
    console.error('Error al actualizar datos: ' + err)
    return
  }
  console.log('Datos actualizados correctamente: ', result)
})

Eliminar datos

Finalmente, también puedes eliminar registros de la base de datos:

const sql = 'DELETE FROM usuarios WHERE nombre = ?'
connection.execute(sql, ['Juan Pérez'], (err, result) => {
  if (err) {
    console.error('Error al eliminar datos: ' + err)
    return
  }
  console.log('Datos eliminados correctamente: ', result)
})

Manejo de errores y buenas prácticas

Es importante gestionar los errores adecuadamente para evitar que tu aplicación se caiga o quede con datos corruptos. Algunas buenas prácticas incluyen:

  • Validar los datos antes de realizar consultas.
  • Usar transacciones para operaciones críticas.
  • Configurar un manejo adecuado de errores para la conexión a la base de datos.

Optimización de consultas en MySQL

Para mejorar el rendimiento, es importante que tus consultas SQL estén bien optimizadas. Algunas estrategias incluyen:

  • Uso de índices: Mejora el tiempo de respuesta en las consultas de búsqueda.
  • Estructura de la base de datos: Asegúrate de que las tablas estén bien normalizadas.
  • Evita consultas innecesarias: Minimiza la cantidad de consultas a la base de datos.

Conclusión

Integrar MySQL con Node.js es una excelente opción para construir aplicaciones robustas y escalables. Siguiendo estos pasos, podrás crear y administrar tu base de datos con facilidad. Recuerda que las buenas prácticas y la optimización son clave para mantener tu aplicación eficiente.


Preguntas Frecuentes

¿Cuál es la diferencia entre mysql y mysql2?

mysql2 es una versión más eficiente y moderna del paquete mysql, que también es compatible con promesas y async/await, lo que facilita su uso en aplicaciones Node.js modernas.

¿Cómo puedo usar async/await con MySQL?

Aquí tienes un ejemplo de cómo usar async/await para realizar una consulta:

const mysql = require('mysql2/promise')

async function consultarDatos() {
  const connection = await mysql.createConnection({
    host: 'localhost',
    user: 'root',
    database: 'test',
  })
  const [rows, fields] = await connection.execute('SELECT * FROM usuarios')
  console.log(rows)
}

consultarDatos()

Recursos adicionales