API Express.js que executa consultas SQL em bancos de dados MySQL e PostgreSQL dinamicamente
O objetivo deste projeto é desenvolver um sistema de banco de dados relacional voltado para a organização e gerenciamento de dados microbiológicos experimentais, com foco em amostras isoladas, consórcios microbianos, características genômicas e resultados de ensaios laboratoriais
bacteriadb
├── index.js # Servidor principal (Node.js) - inicialização, middleware e comentários
├── db.js # Módulo de conexões MySQL e PostgreSQL, helpers de conexão
├── routes/
│ └── query.js # Rotas de consulta SQL (API), todas comentadas e isoladas
├── pages/
│ └── index.html # Interface web responsiva (CRUD, JOIN, SQL manual)
├── static/
│ ├── app.js # Inicialização da UI e helpers globais
│ ├── db-schema.json # Esquema das tabelas do banco de dados (gerado/exportado)
│ ├── delete-form.js # Formulário modular de deleção (CRUD Delete)
│ ├── insert-form.js # Formulário modular de inserção (CRUD Insert)
│ ├── relation-form.js # Consulta relacional visual (JOIN por FK)
│ ├── advanced-relation-form.js # Consulta relacional avançada (múltiplos joins)
│ ├── select-form.js # Formulário modular de consulta/filtro (CRUD Select)
│ ├── style.css # Estilos responsivos, layout e tema visual
│ ├── ui.js # Componentes UI extras (modais, feedback)
│ ├── update-form.js # Formulário modular de atualização (CRUD Update)
│ ├── query-examples.json # Exemplos de consultas pré-definidas
├── ADVANCED_QUERIES_GUIDE.md # Guia de uso das consultas avançadas
├── .env # Configurações de ambiente
├── .gitignore
├── package.json
├── package-lock.json
└── README.md
npm installEdite o arquivo .env para configurar o tipo de banco e credenciais:
# Tipo de banco: 'mysql' ou 'postgres'
DB_TYPE=mysql
# Configurações do Banco
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=sua_senha
DB_NAME=bacteriadb
DB_PORT=3306
# Porta do Servidor
PORT=3010DB_TYPE=mysql
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=senha123
DB_NAME=bacteriadb
DB_PORT=3306DB_TYPE=postgres
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=senha123
DB_NAME=bacteriadb
DB_PORT=5432npm startA API estará disponível em http://localhost:3010
- Pare o servidor (Ctrl+C)
- Edite o arquivo
.enve altereDB_TYPE:- Para MySQL:
DB_TYPE=mysql - Para PostgreSQL:
DB_TYPE=postgres
- Para MySQL:
- Ajuste as credenciais conforme necessário
- Reinicie o servidor:
npm start
Executa qualquer consulta SQL no banco configurado.
Requisição:
{
"query": "SELECT * FROM usuario LIMIT 5;"
}Resposta (Sucesso):
{
"success": true,
"query": "SELECT * FROM usuario LIMIT 5;",
"database": {
"type": "mysql",
"host": "localhost",
"port": "3306",
"database": "bacteriadb",
"user": "root"
},
"rowCount": 5,
"data": [
{
"id": 1,
"nome": "João Silva",
"email": "joao@email.com"
}
],
"fields": [
{"name": "id", "type": 3},
{"name": "nome", "type": 253}
],
"limited": false,
"executedAt": "2025-01-27T10:30:00.000Z"
}Testa a conexão com o banco configurado.
Resposta:
{
"success": true,
"message": "Conexão com MYSQL funcionando corretamente",
"database": {
"type": "mysql",
"host": "localhost",
"port": "3306",
"database": "bacteriadb"
},
"timestamp": "2025-01-27T10:30:00.000Z"
}Obtém informações sobre o banco configurado.
Resposta:
{
"success": true,
"database": {
"type": "postgres",
"host": "localhost",
"port": "5432",
"database": "bacteriadb",
"user": "postgres"
},
"message": "Conectado ao POSTGRESQL",
"timestamp": "2025-01-27T10:30:00.000Z"
}Verificação de saúde da API.
Resposta:
{
"status": "OK",
"service": "API Executor SQL Multiplataforma",
"version": "2.0.0",
"supportedDatabases": ["MySQL", "PostgreSQL"],
"currentDatabase": "mysql",
"timestamp": "2025-01-27T10:30:00.000Z"
}Acesse http://localhost:3010 para utilizar a interface visual do BacteriaDB, que inclui:
- ✅ Execução de consultas com editor SQL manual
- ✅ Formulários automáticos de CRUD para inserção, consulta, atualização e remoção de dados
- ✅ Consultas relacionais guiadas por formulário (joins dinâmicos via seleção de tabelas e FKs)
- ✅ Teste de conectividade com o banco atual
- ✅ Informações do banco (tipo, host, porta, banco selecionado, etc.)
- ✅ Resultados formatados em tabelas responsivas
- ✅ Indicador visual do tipo de banco conectado
- ✅ Geração de logs de auditoria
(todas as operações CRUD, consultas e erros são registrados em/logs/app.log) - ✅ Backup do banco de dados
(botão “Fazer backup” exporta arquivo.sqlpara download) - ✅ Restauração de backup
(upload de arquivo.sqlvia formulário para restaurar o banco) - ✅ Mensagens amigáveis e status detalhado das operações no frontend
Todas as interações são registradas no log e as operações críticas (backup/restauração) possuem feedback automático de sucesso ou falha.
curl -X POST http://localhost:3010/query \
-H "Content-Type: application/json" \
-d '{"query": "SELECT COUNT(*) as total_usuarios FROM usuario;"}'curl -X POST http://localhost:3010/query \
-H "Content-Type: application/json" \
-d '{"query": "SELECT version();"}'- express: Framework web para Node.js
- mysql2: Driver MySQL com suporte a Promises
- pg: Driver PostgreSQL nativo
- dotenv: Gerenciamento de variáveis de ambiente
- cors: Middleware para requisições cross-origin
npm install express mysql2 pg dotenv cors❌ Falha na conexão com MYSQL: connect ECONNREFUSEDSolução:
- Verifique se o MySQL/PostgreSQL está rodando
- Confirme credenciais no
.env - Teste conexão manual:
mysql -u root -poupsql -U postgres
❌ Database 'bacteriadb' doesn't existSolução:
-- MySQL
CREATE DATABASE bacteriadb;
-- PostgreSQL
CREATE DATABASE bacteriadb;Error: listen EADDRINUSE :::3010Solução:
- Altere
PORTno.env - Mate processos:
lsof -ti:3010 | xargs kill
Solução:
- Otimize consultas lentas
- Adicione índices no banco
- Aumente timeout em
db.js
Ative logs detalhados:
NODE_ENV=development
DEBUG=true