Como lidar com conexões de banco de dados no Node.js?

Gerenciar conexões com bancos de dados no Node.js é essencial para garantir a integridade e performance das operações de leitura e escrita.

Como lidar com conexões de banco de dados no Node.js?

Lidar com conexões de banco de dados no Node.js é fundamental para garantir que as consultas sejam realizadas de maneira eficiente e segura. Dependendo do banco de dados que você está utilizando, como MySQL, PostgreSQL ou MongoDB, o processo de conexão pode variar, mas as boas práticas permanecem as mesmas.

1. Conectando ao MySQL com mysql2

Para se conectar a um banco MySQL, usamos o pacote mysql2. Aqui está um exemplo de como realizar a conexão:

const mysql = require('mysql2');

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

connection.connect((err) => {
    if (err) {
        console.error('Erro ao conectar ao MySQL:', err.stack);
        return;
    }
    console.log('Conectado ao MySQL com ID:', connection.threadId);
});

Esse exemplo cria uma conexão simples com o MySQL. Você deve sempre garantir que a conexão seja bem-sucedida e tratar erros adequadamente.

2. Conectando ao PostgreSQL com pg

Para PostgreSQL, usamos o pacote pg para realizar a conexão. O exemplo abaixo mostra como configurar a conexão:

const { Client } = require('pg');

const client = new Client({
    host: 'localhost',
    user: 'usuario',
    password: 'senha',
    database: 'meubanco',
    port: 5432,
});

client.connect()
    .then(() => console.log('Conectado ao PostgreSQL'))
    .catch(err => console.error('Erro ao conectar ao PostgreSQL:', err));

É importante lembrar de fechar a conexão com o banco de dados quando não for mais necessária. Isso ajuda a evitar vazamentos de memória e melhora o desempenho da aplicação.

3. Gerenciando Conexões com Sequelize

O Sequelize é uma ferramenta poderosa que abstrai a conexão com o banco de dados relacional. Para configurar a conexão com o Sequelize, basta criar uma instância de Sequelize:

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('meubanco', 'usuario', 'senha', {
    host: 'localhost',
    dialect: 'mysql',
});

sequelize.authenticate()
    .then(() => console.log('Conexão com o banco de dados bem-sucedida!'))
    .catch(err => console.error('Erro ao conectar com o banco de dados:', err));

4. Gerenciando Conexões de Banco de Dados com Mongoose (MongoDB)

Quando trabalhamos com MongoDB, o Mongoose é a melhor escolha para abstrair a interação com o banco de dados. Veja como conectar ao MongoDB usando o Mongoose:

const mongoose = require('mongoose');
require('dotenv').config();

const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/meubanco';

mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('Conectado ao MongoDB'))
    .catch(err => console.error('Erro ao conectar ao MongoDB:', err));

5. Conexões em Ambiente de Produção

Quando sua aplicação estiver em produção, você deve considerar o uso de pooling de conexões para melhorar a escalabilidade e evitar abrir conexões repetidamente. No Sequelize, por exemplo, você pode configurar o pooling:

const sequelize = new Sequelize('meubanco', 'usuario', 'senha', {
    host: 'localhost',
    dialect: 'mysql',
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    }
});

6. Fechando Conexões de Banco de Dados

Sempre feche as conexões de banco de dados quando elas não forem mais necessárias. Para isso, utilize o método .end() para MySQL e PostgreSQL ou .disconnect() para o MongoDB.

connection.end(); // MySQL
client.end(); // PostgreSQL
mongoose.disconnect(); // MongoDB

Conclusão

Gerenciar as conexões de banco de dados de forma eficiente é essencial para garantir a performance, segurança e escalabilidade da aplicação. Sempre utilize boas práticas para garantir que suas conexões sejam gerenciadas corretamente e que não haja vazamentos de recursos.

Quando sua aplicação lida com dados de bancos relacionais ou NoSQL, como MySQL, PostgreSQL ou MongoDB, entender como gerenciar conexões corretamente é essencial. Gerenciar conexões abertas, usar pooling e fechar conexões são práticas recomendadas para garantir que sua aplicação seja eficiente e escalável.

Ferramentas como Sequelize e Mongoose ajudam a facilitar o gerenciamento dessas conexões, tornando a interação com os bancos de dados mais simples e organizada, sem a necessidade de escrever SQL ou consultas MongoDB complexas manualmente.

Algumas aplicações:

  • Integração de sistemas de e-commerce com bancos de dados
  • Aplicações financeiras com alta demanda de consultas
  • Armazenamento de grandes volumes de dados em bancos de dados relacionais
  • Gerenciamento de dados temporários em sistemas de cache
  • Plataformas de análise de dados em tempo real

Dicas para quem está começando

  • Utilize pooling de conexões para evitar sobrecarga no banco de dados.
  • Garanta que as credenciais do banco de dados sejam armazenadas em variáveis de ambiente.
  • Use promises ou async/await para lidar com operações assíncronas de banco de dados.
  • Evite manter conexões abertas quando não forem necessárias.
  • Teste a conexão ao banco de dados em ambientes de desenvolvimento e produção.

Contribuições de Lucas Fernandes

Compartilhe este tutorial: Como lidar com conexões de banco de dados no Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como criar migrations no Sequelize?

As migrations no Sequelize são usadas para versionar o banco de dados, permitindo que as alterações no esquema sejam aplicadas de forma controlada e sem perda de dados.

Tutorial anterior

Como evitar SQL Injection no Node.js?

SQL Injection é um dos ataques mais comuns em aplicações web. Neste tutorial, aprenda como evitá-lo no Node.js usando boas práticas de segurança.

Próximo tutorial