como-usar-mysql-con-nodejs

Cómo usar una base de datos MySQL con Node.js

MariaDB y MySQL son ampliamente conocido como unos de los sistemas de gestión de bases de datos relacionales más populares.

Conectar una aplicación Node.js a una base de datos MySQL es una tarea común y muy frecuente para muchos proyectos.

Cómo conectar Node.js a MySQL

Antes de comenzar necesitarás instalar el paquete mysql2, que proporciona una forma eficiente de interactuar con MySQL desde Node.js.

npm install mysql2

Creación del archivo de conexión a la base de datos

El primer paso es establecer una conexión con la base de datos MySQL. Para ello, crearemos un archivo llamado dbConnection.mjs que contendrá la lógica de conexión.

Podríamos meter todo en el mismo fichero. El objetivo principal de tenerlo separado es que esté más modularizado y, que tu datos de conexión estén en otro fichero, y nos los publiques donde no debes sin querer.

import mysql from 'mysql2/promise';

async function connect() {
  try {
    const connection = await mysql.createConnection({
      host: 'localhost',
      user: 'tu_usuario',
      password: 'tu_contraseña',
      database: 'nombre_de_tu_db',
    });
    console.log('Conexión a MySQL establecida.');
    return connection;
  } catch (error) {
    console.error('Error al conectar a MySQL:', error);
    throw error;
  }
}

export default connect;

En este archivo:

  • Importamos el módulo mysql2/promise, que nos permite utilizar promesas para manejar las consultas a la base de datos.
  • Definimos una función connect que crea una conexión con los detalles proporcionados, como el host, usuario, contraseña y nombre de la base de datos.
  • Si la conexión se establece con éxito, la función devuelve el objeto de conexión. De lo contrario, muestra un mensaje de error y lanza una excepción.

Asegúrate de reemplazar 'localhost', 'tu_usuario', 'tu_contraseña' y 'nombre_de_tu_db' con los valores correctos para tu base de datos

Creando la conexión a la base de datos

Una vez que tenemos el archivo de conexión, podemos utilizarlo en cualquier parte de nuestra aplicación Node.js para interactuar con la base de datos.

Por ejemplo, vamos a realizar algunas consultas básicas.

import connect from './dbConnection.mjs';

async function fetchData() {
  const db = await connect();
  try {
    // Consulta para obtener todos los usuarios
    const [rows, fields] = await db.execute('SELECT * FROM users');
    console.log('Todos los usuarios:', rows);

    // Consulta para obtener usuarios por ciudad
    const city = 'New York';
    const [cityRows, cityFields] = await db.execute('SELECT * FROM users WHERE city = ?', [city]);
    
    console.log(`Usuarios en ${city}:`, cityRows);
  } catch (error) {
    console.error('Error al obtener datos:', error);
  } finally {
    db.end();
  }
}

fetchData();

En este ejemplo,

  • Primero importamos la función connect del archivo dbConnection.mjs.
  • Luego, utilizamos esta función para obtener una conexión con la base de datos.
  • Después, realizamos dos consultas:
    • La primera consulta obtiene todos los usuarios de la tabla users.
    • La segunda consulta obtiene usuarios que pertenecen a una ciudad específica, en este caso, “New York”.

Operaciones CRUD

Una vez que tenemos el archivo de conexión, podemos utilizarlo para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en nuestra base de datos MySQL desde Node.js.

Creación de datos

Primero veamos cómo insertar nuevos datos en la base de datos:

async function insertData(name, email) {
  // Establecemos la conexión a la base de datos
  const db = await connect(); 
  try {
    // Ejecutamos la consulta SQL para insertar datos
    const [result] = await db.execute('INSERT INTO users (name, email) VALUES (?, ?)', [name, email]); 
    // Mostramos el resultado de la operación
    console.log('Datos insertados:', result); 
  } catch (error) {
    // Manejamos cualquier error que ocurra durante la inserción de datos
    console.error('Error al insertar datos:', error); 
  } finally {
    // Cerramos la conexión a la base de datos, independientemente del resultado
    db.end(); 
  }
}

insertData('John Doe', 'john@example.com'); // Ejecutamos la función insertData con los datos proporcionados

Lectura de datos

Ahora veamos cómo obtener todos los usuarios de la base de datos:

async function fetchData() {
  // Establecemos la conexión a la base de datos
  const db = await connect(); 
  try {
    // Ejecutamos la consulta SQL para obtener todos los usuarios
    const [rows, fields] = await db.execute('SELECT * FROM users'); 
    // Mostramos todos los usuarios recuperados de la base de datos
    console.log('Todos los usuarios:', rows); 
  } catch (error) {
    // Manejamos cualquier error que ocurra durante la lectura de datos
    console.error('Error al obtener datos:', error); 
  } finally {
    // Cerramos la conexión a la base de datos, independientemente del resultado
    db.end(); 
  }
}

fetchData(); // Ejecutamos la función fetchData para obtener todos los usuarios

Actualización de datos

Veamos cómo actualizaríamos datos en la base de datos:

async function updateData(userId, newName) {
  // Establecemos la conexión a la base de datos
  const db = await connect(); 
  try {
    // Ejecutamos la consulta SQL para actualizar datos
    const [result] = await db.execute('UPDATE users SET name = ? WHERE id = ?', [newName, userId]); 
    // Mostramos el resultado de la operación
    console.log('Datos actualizados:', result); 
  } catch (error) {
    // Manejamos cualquier error que ocurra durante la actualización de datos
    console.error('Error al actualizar datos:', error); 
  } finally {
    // Cerramos la conexión a la base de datos, independientemente del resultado
    db.end(); 
  }
}

updateData(1, 'Jane Smith'); // Ejecutamos la función updateData con los datos proporcionados

Eliminación de datos

Por último, veamos cómo eliminar datos de la base de datos:

async function deleteData(userId) {
  // Establecemos la conexión a la base de datos
  const db = await connect(); 
  try {
    // Ejecutamos la consulta SQL para eliminar datos
    const [result] = await db.execute('DELETE FROM users WHERE id = ?', [userId]); 
    // Mostramos el resultado de la operación
    console.log('Datos eliminados:', result); 
  } catch (error) {
    // Manejamos cualquier error que ocurra durante la eliminación de datos
    console.error('Error al eliminar datos:', error); 
  } finally {
    // Cerramos la conexión a la base de datos, independientemente del resultado
    db.end(); 
  }
}

deleteData(2); // Ejecutamos la función deleteData con el ID del usuario a eliminar

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full