Cómo conectar Node.js con MySQL

Cómo conectar Node.js con MySQL

Las bases de datos son fundamentales para el desarrollo de back-end. Son la pieza clave para cualquier almacenamiento que puedas imaginar que se necesita en una aplicación. Entre tantos sistemas de gestión de bases de datos existentes (como MongoDb, SQLite, Oracle, etc.), uno de los más utilizados y conocidos es Mysql, muy utilizado por empresas famosas como NASA, HP, Nokia, Sony, Alcatel, Cisco Systems, Google, etc.

Pensando en la importancia de MySQL para la comunidad de programación y su importancia para el tema, en este artículo explicaremos cómo configurar una conexión efectiva entre Node.js y esta base de datos, mediante la combinación de algunos marcos que funcionan con esta rama.

¿Qué es Node.js y cómo instalarlo?

Node es un intérprete del lenguaje JavaScript, creado a partir de otro llamado V8. A lo largo de los años, se ha vuelto cada vez más utilizado porque admite JavaScript tanto en el lado del cliente como en el del servidor, además de ser fácil de entender. Hoy en día, es utilizado por varias empresas como Paypal, Amazon y Netflix.

Durante el desarrollo de este artículo, utilizaremos el sistema de módulos Common.js, pero no se limita a esta forma de exportar e importar módulos, ya que desde la versión 14 Node comenzó a ofrecer soporte para ECMAScript 6.

Es importante resaltar que Node debe estar instalado en tu máquina para que puedas desarrollar utilizando la herramienta. Si tu sistema operativo es Mac o Windows, navega hasta la dirección https://nodejs.org/en/, descarga la versión LTS (la versión más actual y estable de Node.js) e instálala ejecutando el archivo descargado. Si usas alguna versión de Linux, escribe las siguientes líneas de comando en su terminal:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

nvm install lts/*

Si la instalación de Node se completó correctamente para alguno de los casos mencionados, cuando ejecutemos el siguiente comando recibiremos la versión instalada de Node como información en nuestra terminal:

node --version

Como el enfoque de este artículo es detallar la implementación de Node.js para una determinada función (que en este caso será la conexión a la base de datos), no detallaremos cómo descargar e instalar MySQL, ya que existen una serie de pasos a realizar de acuerdo a cada sistema operativo que se utilice. Esto alargaría nuestro tutorial y nos alejaría del enfoque principal de Node.js.

Para cualquier duda que pueda existir sobre el tema, accede a la web de MySQL y sigue las instrucciones allí. Otra opción es usar Docker para ejecutar una imagen de MySQL sin necesidad de instalar este sistema de gestión de base de datos, reduciendo considerablemente el tiempo dedicado a la actividad (por si no lo sabe, Docker es una plataforma que utiliza la virtualización para otorgar a los usuarios "contenedores" con un programa determinado).

Un gran consejo que vale la pena mencionar y que puede ayudar mucho con tu experiencia con MySQL es la instalación de Workbench, ya que facilita considerablemente la interacción con la base de datos, ya sea visualizándola o manipulándola. Haz clic aquí para ser dirigirteal sitio web oficial de Workbench y seguir la instalación paso a paso según el sistema operativo que utilices.

Primeros pasos

Comencemos nuestro proyecto creando un directorio donde estará el archivo package.json. También instalaremos MySQL2 (utilizado para la conexión entre Node.js y MySQL), Express (para organizar solicitudes y respuestas) y Nodemon (para evitar la necesidad de reiniciar el servidor cada vez que hacemos cambios en los archivos de la base de datos). Para hacer esto, simplemente ejecuta los siguientes comandos en una terminal iniciada en la carpeta raíz del proyecto:

npm init -y

npm install mysql2

npm install express

npm install nodemon

Con el objetivo de una buena organización de la aplicación, crearemos una carpeta llamada src que contiene un archivo llamado server.js. También insertaremos un script "dev" en el archivo package.json que usará nodemon para ejecutar el server.js que creamos:

Figura 1 - Primeros pasos de nuestra aplicación

Una vez hecho esto, es hora de configurar server.js, que usaremos como archivo principal del proyecto. En él realizaremos las configuraciones básicas para “construir” un servidor, importando y ejecutando Express (líneas 1 y 3 de la figura 2), informando a la aplicación que utilizaremos solicitudes y respuestas en formato Json (línea 5 de la figura 2) y, finalmente, declarando que el servidor funcionará en el puerto 3003 y ejecutará un "console.log" (línea 7 en la figura 2):

Figura 2 - Configurando el archivo principal de la aplicación

Si todo va bien, al ejecutar el comando “npm run dev” en una terminal ejecutada en la carpeta raíz de tu proyecto, tendrás el siguiente retorno:

Figura 3 - Ejecutando el archivo server.js con Nodemon

Preparando la conexión con MySQL

Ahora que hemos realizado todas las configuraciones necesarias para ejecutar un servidor con Node.js, podemos configurar la conexión a nuestra base de datos MySQL a través de la biblioteca MySQL2. Para ello, crearemos un archivo específico para esta implementación llamado conexión. En ella habrá una constante que recibirá la importación de “mysql2/promise” (el uso de “promise” es necesario porque las consultas a bases de datos externas implican tratamientos de asincronía y, para usar async y await con la librería, necesitamos realizar la importación como se explica).

Luego, usaremos la función createPool, que toma un objeto como parámetro. Esta función se encarga de devolver un conjunto de conexiones anteriores a la base de datos. Son estas conexiones las que utilizaremos a lo largo de la aplicación para realizar cualquier tipo de interacción con MySQL:

Figura 4 - Configurando la conexión con la base de datos

Ten en cuenta que el objeto pasado como parámetro de la función createPool tiene una serie de claves necesarias para la conexión:

  • Host - La dirección IP de MySQL en nuestro caso podemos utilizar el “localhost” en lugar de la IP sin problemas, ya que el mismo se refiere a la dirección local que empleamos para ejecutar nuestro servidor Node.js en el puerto 3003;
  • Port - El que elegiste para acceder a MySQL (si instalaste MySQL utilizando la configuración predeterminada, el puerto será el 3306);
  • User - El nombre del usuario con el que ingresaremos a MySQL;
  • Password - La contraseña utilizaremos para entrar a MySQL;
  • Database - El nombre de la base de datos a la cual nos conectaremos.

OBS - Hay otras claves que podemos enviar como referencia para configurar la conexión. Sin embargo, como estamos haciendo una sola conexión simple y sin mayores complejidades, bastará con los datos reportados en la figura 4.

Luego de configurar cómo se debe realizar la conexión a través de la función createPool, podemos realizar nuestras primeras interacciones con MySQL. Es importante asegurarse de que la información completada sea correcta, ya que completarla incorrectamente tendrá como resultado una conexión ineficaz con la base de datos.

Interactuando con la base de dados

La conexión que haremos con MySQL devolverá todos los elementos existentes en una tabla. De esta forma, crearemos un archivo llamado allItems e importaremos la conexión que acabamos de crear en él.

Al implementar la función createPool, tenemos acceso a otra función llamada ejecutar. Nos permite enviar comandos MySQL como un parámetro de cadena que se ejecutan y devuelven una respuesta determinada según la solicitud (en nuestro caso, seleccionaremos todos los elementos de la tabla actor de la base de datos sakila):

Figura 5 - Creando la interacción con la base de datos

Ten en cuenta que usamos async en la función allItems y await en la conexión responsable de interactuar con la base de datos. Esto es necesario porque no sabemos cuándo nos responderá el banco y solo podemos continuar con la ejecución después de recibir algún resultado de este. Ve también que hubo una desestructuración del valor que recibe la consulta en la línea 4 de la figura 5. Esto sucede porque la respuesta devuelta por esta consulta es una matriz con varias piezas de información, donde la primera posición almacena los datos que fue devuelto de la tabla.

Finalmente, debemos crear un método que muestre esta información. Usaremos uno de los verbos que el protocolo HTTP pone a nuestra disposición para la interacción: GET. Será el encargado de devolver una respuesta con un estado y un JSON que reciba el resultado de nuestra función allItems.

Figura 6 - Creación del método que ejecuta la función allItems.
Figura 7 - Realizando la requisición GET creada.

OBS - El software usado en la figura 6 para simular solicitudes fue Insomnia, pero puedes usar otros que te resulten más cómodos o incluso consultar la respuesta vía navegador, accediendo al puerto que definiste en el archivo server.js (en nuestro caso, por medio de la dirección “localhost:3003”).

Consideraciones finales

En este artículo, realizamos una conexión efectiva con MySQL mediante el uso de la biblioteca Mysql2. De la misma manera que realizamos una consulta en la que se devolvieron todos los elementos de la tabla de actores, también podemos usar la función de ejecución para otras funcionalidades de MyAQL (ya sea Select, Update, Delete, etc.).

Sin embargo, algunas respuestas son diferentes de otras y deben manejarse adecuadamente antes de ser devueltas. ¡Deseo lo mejor a quien se interesó por el tema y llegó hasta aquí, además de grandes experiencias en conexiones de Node.js con MySQL!

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.