Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 47 – API JavaScript, Node.js e Express – MySQL with Node.js – mysql2 package

Imagem destacada da aula de API

Introdução (3 min)

Imagine um restaurante. A cozinha, com seus ingredientes e receitas, representa seu banco de dados MySQL. Os garçons, que anotam os pedidos e trazem os pratos, são sua API construída com Node.js e o pacote mysql2. Este pacote é a ponte que permite à sua aplicação “conversar” com o MySQL, buscar informações e realizar operações.

Dominar essa integração é essencial para APIs modernas, pois a grande maioria delas precisa persistir dados. Imagine um e-commerce sem um banco de dados para armazenar produtos, usuários e pedidos. Seria impensável!

Nesta aula, vamos implementar a conexão com um banco de dados MySQL usando o pacote mysql2 em um ambiente Node.js/Express, seguindo as melhores práticas e considerando as especificidades do HostGator Plano M.

No contexto do ecossistema Node.js/Express, o mysql2 se encaixa como um componente vital para a camada de acesso a dados, permitindo que sua aplicação interaja com o MySQL de forma eficiente e segura.

Conceito Fundamental (7 min)

O pacote mysql2 é uma interface que viabiliza a comunicação entre sua aplicação Node.js e um servidor MySQL. Ele oferece uma série de métodos para executar consultas SQL, gerenciar transações e lidar com conexões. Utilizando uma conexão em pool, o mysql2 otimiza o acesso ao banco de dados, reutilizando conexões existentes em vez de criar novas a cada solicitação, melhorando significativamente o desempenho.

A terminologia importante inclui: conexão, pool de conexões, query, transação, prepared statement. Em produção, o mysql2 é utilizado em aplicações web, microsserviços, APIs REST, e qualquer outro sistema que necessite persistir dados em um banco de dados MySQL.

Ele se integra com ORMs (Object-Relational Mappers) como Sequelize e TypeORM, simplificando ainda mais o desenvolvimento. Entretanto, usar mysql2 diretamente proporciona maior controle e performance, sendo ideal para cenários que demandam alta eficiência.

As vantagens incluem: alta performance, suporte a prepared statements (segurança contra SQL injection), API promissora, e integração perfeita com o ecossistema Node.js. Como desvantagem, exige conhecimento de SQL.

Implementação Prática (10 min)

// Importa o pacote mysql2
const mysql = require('mysql2/promise');

// Configurações da conexão, adaptadas para HostGator Plano M const dbConfig = { host: 'localhost', // Host do seu banco de dados no HostGator user: 'seu_usuario', // Seu usuário MySQL password: 'sua_senha', // Sua senha MySQL database: 'seu_banco_de_dados', // Nome do seu banco de dados waitForConnections: true, // Aguarda por conexões disponíveis connectionLimit: 10, // Limite de conexões no pool queueLimit: 0, // Limite de requisições na fila (0 para ilimitado) };

async function executarQuery(sql, valores) { try { const pool = await mysql.createPool(dbConfig); // Cria o pool de conexões const [rows, fields] = await pool.execute(sql, valores); // Executa a query com prepared statements pool.end(); // Fecha o pool após a execução - IMPORTANTE no HostGator Plano M return rows; } catch (error) { console.error('Erro ao executar query:', error); // Log de erro detalhado throw error; // Repassa o erro para tratamento posterior } }

// Exemplo de uso async function buscarUsuarios() { const usuarios = await executarQuery('SELECT * FROM usuarios', []); // Busca todos os usuários console.log('Usuários:', usuarios); }

buscarUsuarios();

// Teste básico async function testarConexao() { try { await executarQuery('SELECT 1', []); console.log('Conexão com o banco de dados bem-sucedida!'); } catch (error) { console.error('Erro ao conectar ao banco de dados:', error); } }

testarConexao();

Exercício Hands-On (5 min)

Desafio: crie uma função inserirUsuario(nome, email) que insere um novo usuário no banco de dados.

Solução:

async function inserirUsuario(nome, email) {
  const resultado = await executarQuery('INSERT INTO usuarios (nome, email) VALUES (?, ?)', [nome, email]);
  console.log('Usuário inserido com ID:', resultado.insertId);
}

inserirUsuario('João Silva', '[email protected]');

Testes e Validação:

Verifique se o novo usuário foi inserido corretamente no banco de dados utilizando um cliente MySQL como o phpMyAdmin ou MySQL Workbench.

Troubleshooting:

Erro comum: ER_ACCESS_DENIED_ERROR. Verifique as credenciais de acesso ao banco de dados (usuário, senha, host, nome do banco de dados) no arquivo dbConfig.

Próximos Passos:

    • Explore outros métodos do mysql2, como transações e prepared statements.
    • Integre o mysql2 com um framework como o Express.js para construir APIs REST.
    • Aprenda sobre ORMs como Sequelize e TypeORM para abstrair a interação com o banco de dados.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas