- Published on
Cómo usar una base de datos MySQL con Node.js: Guía Completa
- Authors
- Name
- CodePorx
- @porxd3
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 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 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 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 una vez que inicies podras ver tu base de datos corriendo perfectamente
aca podemos administrar nuestra base de datos y tablas desde una interfaz grafica
ahora si a conectar mysql con nodejs
mysql2
Instalación de MySQL y el paquete 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
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
mysql
y mysql2
?
¿Cuál es la diferencia entre 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.
async/await
con MySQL?
¿Cómo puedo usar 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()