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 archivodbConnection.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”.
- La primera consulta obtiene todos los usuarios de la tabla
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