Como conectar o Node.js com o MySQL

Como conectar o Node.js com o MySQL

Os bancos de dados são importantíssimos para o desenvolvimento back-end. Eles são a peça chave para qualquer armazenamento que você possa imaginar e que seja necessário em uma aplicação. Dentre tantos sistemas de gerenciamento de bancos de dados existentes (como por exemplo MongoDb, SQLite, Oracle, etc.), um dos mais utilizados e conhecidos é o Mysql, amplamente abordado por empresas famosas como NASA, HP, Nokia, Sony, Alcatel, Cisco Systems, Google, etc.

Pensando na importância do Mysql para a comunidade programadora e em sua importância para o tema, neste artigo explicaremos como configurar uma conexão efetiva entre o Node.js e este banco de dados, por meio da combinação alguns frameworks que trabalham com este ramo.

O que é o Node.js e como instalá-lo?

O Node é um interpretador da linguagem JavaScript, criado a partir de um outro chamado V8. Com o passar dos anos foi se tornando cada vez mais utilizado porque suporta o Javascript tanto no lado cliente quanto do lado servidor, além de ser de fácil compreensão. Hoje, é utilizado por diversas empresas como Paypal, Amazon e Netflix.

Durante o desenvolvimento neste artigo, utilizaremos o sistema de módulos Common.js, mas não se atenha apenas a esta maneira de exportar e importar módulos, uma vez que a partir da versão 14 o Node começou a oferecer suporte para o ECMAScript 6.

É importante destacar que o Node deve estar instalado em sua máquina para que você possa desenvolver utilizando a ferramenta. Caso o seu sistema operacional seja o Mac ou Windows, navegue até o endereço https://nodejs.org/en/, realize o download da versão LTS (versão mais atual e estável do Node.js) e efetue a instalação executando o arquivo baixado. Se você utiliza alguma versão do Linux, digite as seguintes linhas de comando no seu terminal:

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

nvm install lts/*

Se a instalação do Node foi concluída corretamente para qualquer um dos casos citados, ao executarmos o comando abaixo receberemos como informação no nosso terminal a versão do Node instalada:

node --version

O que é o Mysql?

O Mysql é um sistema de gerenciamento de banco de dados que utiliza a linguagem sql, pertence à empresa Oracle e pode ser executado tanto via linha de comando no terminal (caso esteja instalado) quanto em softwares auxiliares que facilitem a interação com o mesmo.

Como o foco deste artigo é detalhar a implementação do Node.js para uma determinada função (que neste caso será a conexão com o banco de dados), não detalharemos como realizar o download e instalação do MySQL visto que há uma série de passos a serem feitos de acordo com cada sistema operacional que é utilizado. Isto prolongaria o nosso tutorial e nos tiraria do foco principal que é o Node.js. Para quaisquer dúvidas que possam existir sobre o tema, acessem o site do MySQL e sigam as instruções lá contidas. Uma outra opção é utilizar o Docker para executar uma imagem do MySQL sem necessariamente instalar este sistema de gerenciamento de banco de dados, diminuindo consideravelmente o tempo dedicado para a atividade (caso você não conheça, o Docker é uma plataforma que utiliza a virtualização para conceder aos usuários "containers" com um determinado programa).

Uma ótima dica que vale ser destacada e que pode ajudar grandemente sua experiência com o MySQL é a instalação do Workbench, pois ele facilita de uma forma considerável a interação com o banco de dados, seja para a visualização ou manipulação do mesmo. Clique aqui para ser direcionado para o site oficial do Workbench e siga o passo a passo de instalação de acordo com o sistema operacional que você utiliza.

Primeiros passos

Vamos iniciar o nosso projeto criando um diretório onde haverá o arquivo package.json. Também instalaremos o MySQL2 (utilizado para a conexão entre o Node.js e o MySQL), o Express (para organização de requisições e respostas) e o Nodemon (para evitar a necessidade de reiniciar o servidor toda vez que fizermos alguma alteração nos arquivos do projeto). Para isto, basta executar os seguintes comandos em um terminal iniciado na pasta raíz do projeto:

npm init -y

npm install mysql2

npm install express

npm install nodemon

Visando uma boa organização da aplicação, criaremos uma pasta chamada src contendo um arquivo de nome server.js. Também iremos inserir no arquivo package.json um scriptdev” que utilizará o nodemon para executar o server.js que criamos:

Figura 1 - Primeiros passos da nossa aplicação

Feito isto, é hora de configurar o server.js, que utilizaremos como o arquivo principal do projeto. Nele, faremos as configurações básicas para “erguer” um servidor, importando e executando o Express (linhas 1 e 3 da figura 2), informando à aplicação que utilizaremos requisições e respostas no formato Json (linha 5 da figura 2) e, por fim, declarando que o servidor funcionará na porta 3003 e executará um “console.log” (linha 7 da figura 2):

Figura 2 - Configurando o arquivo principal da aplicação


Se tudo der certo, ao executar o comando “npm run dev” em um terminal executado na pasta raíz do seu projeto, você terá o seguinte retorno:

Figura 3 - Executando o arquivo server.js com o nodemon

Preparando a conexão com o MySQL

Agora que fizemos todas as configurações necessárias para a execução de um servidor com o Node.js, podemos começar a configurar a conexão com o nosso banco de dados MySQL por meio da biblioteca MySQL2. Para tal, iremos criar um arquivo específico para esta implementação chamado connection. Nele, haverá uma constante que receberá a importação de “mysql2/promise” (o uso do “promise” é necessário porque consultas a bancos de dados externos envolvem tratamentos por assincronicidade e, para utilizarmos async e await com a biblioteca, precisamos realizar a importação da forma como foi explicado).

Depois, utilizaremos a função createPool, que recebe um objeto como parâmetro. Esta função é responsável por retornar um conjunto de conexões prévias com o banco de dados. São essas conexões que utilizaremos ao longo do desenrolar da aplicação para realizar qualquer tipo de interação com o MySQL:

Figura 4 - Configurando a conexão com o banco de dados


Note que o objeto passado como parâmetro da função createPool possui uma série de chaves necessárias para a conexão:

  • Host - O endereço IP do MySQL: no nosso caso podemos utilizar o “localhost” ao invés do IP sem problemas, já que o mesmo se refere ao endereço local que estamos utilizando para executar o nosso servidor Node.js na porta 3003;
  • Port - A porta que você escolheu para acessar o MySQL (se você instalou o MySQL utilizando as configurações padrões, a porta será a 3306);
  • User - O nome do usuário que acessaremos o Mysql;
  • Password - A senha que utilizaremos para acessar o Mysql;
  • Database - O nome do banco de dados no qual iremos nos conectar.

OBS - Existem outras chaves que podemos enviar como referência para configurar a conexão. Todavia, como estamos realizando uma única conexão simples e sem grandes complexidades, os dados informados na figura 4 já serão o suficiente.

Depois de configurar como deve ser feita a conexão por meio da função createPool, podemos fazer nossas primeiras interações com o Mysql. É importante certificar-se de que as informações preenchidas estão corretas, pois preencher indevidamente qualquer uma delas resultará em uma conexão ineficaz com o banco de dados.

Interagindo com o banco de dados

A conexão que faremos com o Mysql nos proporcionará como retorno todos os itens existentes em uma tabela. Desta forma, criaremos um arquivo chamado allItems e importaremos nele a connection que acabamos de criar. Ao implementar a função createPool, temos acesso a uma outra função chamada execute. Ela permite que enviemos como parâmetro do tipo string comandos do Mysql que são executados e nos retornam uma determinada resposta de acordo com a requisição (no nosso caso, iremos selecionar todos os elementos da tabela actor do banco de dados sakila):

Figura 5 - Criando a interação com o banco de dados


Note que utilizamos async na função allItems e await na connection responsável pela interação com o banco de dados. Isto é necessário pois não sabemos em que momento o banco nos responderá e só podemos continuar a execução após receber algum resultado do mesmo. Veja também que houve uma desestruturação do valor que é recebido pela consulta na linha 4 da figura 5. Isto acontece porque a resposta devolvida por esta query é um array com várias informações, onde a primeira posição armazena os dados que foram retornados da tabela.

Por fim, devemos criar um método que exibirá estas informações. Utilizaremos um dos verbos que o protocolo HTTP nos disponibiliza para a interação: o GET. Ele será responsável por retornar uma resposta com um status e um JSON que recebe o resultado da nossa função allItems.

Figura 6 - Criação do método que executa a função allItems

Figura 7 - Realizando a requisição GET criada


OBS - O software utilizado na figura 6 para simular requisições foi o Insomnia, mas você pode utilizar outros que achar mais confortável ou até mesmo consultar a resposta via browser, acessando a porta que você definiu no arquivo server.js (no nosso caso, por meio do endereço “localhost:3003”).

Considerações finais

Realizamos neste artigo uma conexão efetiva com o MySQL por meio do uso da biblioteca Mysql2. Da mesma forma que realizamos uma query na qual todos os itens da tabela actor foram retornados, também podemos utilizar a função execute para outras funcionalidades do MyAQL (seja SELECT, ou UPDATE, ou DELETE, etc.). Todavia, algumas respostas são diferentes das outras e é preciso que elas sejam devidamente tratadas antes de serem retornadas. Desejamos bons estudos a todos os que se interessaram pelo assunto e chegaram até aqui, além de ótimas experiências nas conexões do Node.js com o MySQL!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.