, ,

Conectando o Node.js ao Mysql

A persistência de dados é algo trivial em qualquer aplicação. Neste post iremos demonstrar como realizamos a conexão dessas duas tecnologias.

A conexão do Node.js com o Mysql pode ser realizada de duas formas:

  • Por intermédio de uma solução ORM (Object-Relational Mapping) como o Sequelize.
  • De forma manual utilizando um Driver específico para a linguagem javascript.

Neste post iremos explorar a forma manual, pois teremos mais opções de configurações que geralmente são abstraídas nos ORM.

Vamos colocar a mão na massa!!! ;D … Antes de iniciar, certifique-se que possui instalados o Node.js e npm.

 

1 – Vamos criar uma pasta “exemploMysql” e acessá-la. Agora abra o terminal e digite o comando para criar um novo projeto Node.js:

npm init -y

A saída do comando será a criação e exibição do arquivo package.json:

marcelo@X1-Carbon:~/Projetos/Blog-exemplos/exemploMysql$ npm init -y
Wrote to /Projetos/Blog-exemplos/exemploMysql/package.json:

{
 "name": "exemploMysql",6 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
}

O package.json é arquivo responsável pelas dependências do projeto.

 

2 – Precisamos instalar a dependência Mysql:

npm install --save mysql

A flag –save indica que a dependência também deverá ser instalada no ambiente de produção.

 

3 – Abra o seu editor de código e crie um arquivo chamado index.js. Agora iremos realizar a importação do módulo mysql:

const mysql = require('mysql');

 

4 – Vamos criar a conexão com o banco:

const connection = mysql.createConnection({
 host: 'localhost',
 user: 'root',
 password: 'teste123',
 database: 'biblioteca'
});

Atribuíamos a constante connection o retorno da função mysql.createConnection() que receberá como parâmetro um objeto com as seguintes propriedades:

  • host – Endereço do servidor Mysql. No caso iremos utilizar uma instalação local;
  • user – Nome do usuário;
  • password – Senha de acesso;
  • database – Nome do banco de dados que queremos acessar.

Você também poderá passar outras informações como:

  • port – Caso a sua instalação do Mysql utilize diferente porta padrão 3306.
  • debug – Para ativar o modo de depuração, o padrão é false.

 

5 – Iremos realizar a abertura da conexão com o banco:

connection.connect();

 

6 – Após a abertura da conexão, poderemos executar as instruções SQL:

connection.query('SELECT * FROM usuario LIMIT 2', function (error, results){

if (error) throw error;

console.log(results);

});

Ao executar a função connection.query() estaremos enviando instruções SQL para o banco de dados. A função possui 2 parâmetros:

  • A instrução SQL que deverá ser executada;
  • A função de callBack que receberá como parâmetros o resultado da função anterior, no caso o resultado da consulta realizada. Funções de callBack sempre serão executadas após o processamento de outra função.

A função de callBack function(error, results, fields) recebe como parâmetros:

  • error – Definido caso ocorra erro de execução. O padrão error-first (erro primeiro) é amplamente difundido em operações assíncronas;
  • results – Resultado da consulta. Por padrão um vetor de objetos RowDataPacket;
  • fields – Contém informações os campos retornados;

Caso exista algum erro de execução a instrução da linha 3 lançará uma exceção , isto possibilitará ao sistema uma forma de se recuperar. Uma postagem realizada no blog da Caelum, há mais de 14 anos, sobre lançamento de exceções é uma excelente leitura sobre o assunto.

 

7 – Após a execução, iremos fechar a conexão:

connection.end();

Ao fechar estaremos liberando o recurso (conexão) e evitando problema de vazamento de memória.

 

8 – Execução do código completo:

const mysql = require('mysql');

const connection = mysql.createConnection({
 host: 'localhost',
 user: 'root',
 password: 'teste123',
 database: 'biblioteca'
});

connection.connect();

connection.query('SELECT * FROM usuario LIMIT 2', function (error, results){

if (error) throw error;

 console.log(results);

});

connection.end();

 

Resultado:

marcelo@X1-Carbon:~/Projetos/Blog-exemplos/exemploMysql$ node index.js
[
 RowDataPacket {
  id: 3,
  nome: 'Bruno Souza',
  habilitado: 'true'
 },
 RowDataPacket {
  id: 4,
  nome: 'Rosa Silva',
  habilitado: 'true'
]

 

Problema resolvido! Tudo certinho!! …

Humm… Será que não podemos melhorar? …

 

Quais os principais problemas com o código apresentado?

  • Toda a resolução do problema em um único lugar;
  • Alta acoplagem e baixa coesão;
  • Problemas de manutenção;
  • Implementação de Testes ou TDD com muito esforço;

Este tipo de código para um protótipo MVP ou teste de viabilidade até passa sem problemas, mas no ambiente de produção teremos sérios problemas.

 

Então, como podemos melhorar?

Simples! Vamos refatorar!! ;D

 

Refatoração é o nome dado ao processo de alterar o código de um software com o objetivo de melhorar a sua estrutura interna sem alterar seu comportamento externo. Ao trazer a prática da refatoração para o dia-a-dia de um projeto, é possível manter a base de código sempre legível e enxuta, reduzindo bugs desconhecidos e acelerando o desenvolvimento de novos comportamentos e funcionalidades (Refatoração: motivações e práticas, 2020).

Existem formas mais elegantes, eficientes e robustas de implementação. A exploração das boas práticas, padrões de projetos e refatoração serão aplicadas ao longo das postagens. Identificar o problema é mais importante que conhecer uma solução e não saber aplicá-la.

Bem, espero que gostem. O primeiro qualquer coisa sempre é o mais complexo.

Um grande abraço e tchau! ;D


Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Bem-vindo!

Me chamo Marcelo Palmito e neste espaço vou compartilhar experiências, estudos e dicas sobre a área de desenvolvimento e engenharia de software, IOT e afins.

“Apaixone-se por desafios, pois independente da experiência cada um sempre será único e motivador.”