5
respostas

Não conecta ao banco de dados

Olá

Ao conectar ao banco de dados está ocorrendo o seguinte erro:

Error: connect ECONNREFUSED 127.0.0.1:8081 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) {
    errno: -111,
    code: 'ECONNREFUSED',
    syscall: 'connect',
    address: '127.0.0.1',
    port: 8081,
    fatal: true
}

Meu arquivo de conexão:

const mysql = require('mysql');

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

module.exports = connection;

Meu index.js:

const customExpress = require("./Config/customExpress");
const connection = require("./Infra/connection");

connection.connect((error) => {
    if(error) {
        console.log(error);
    }else{
        console.log('connected')
    }
});

const app = customExpress();

app.listen(3000, () => {
    console.log('Running! - Port: 3000');
})

Estou usando docker para os containers e com o meu Dbeaver eu consigo me conectar normalmente, conforme a imagem abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Acredito que não seja o docker, mas vou deixar o docker-compose.yml para vocês analisarem:

version: '3'

networks:
  connection:
    driver: bridge

services:
  node:
    build: .
    container_name: agenda_pet
    ports:
    - "80:3000"
    - "443:443"
    volumes:
    - ./:/var/www
    links:
    - db
    networks:
    - connection

  db:
    image: mysql:8.0
    container_name: agenda_pet_db
    environment:
    #- MYSQL_ALLOW_EMPTY_PASSWORD=true
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=agenda_pet
    volumes:
    - /var/lib/mysql  
    networks:
    - connection
    ports:
      - "8081:3306"

Ja tentei outras abordagens, como o mysql2 mas todos retornam o mesmo erro, alguma ideia do que possa ser?

5 respostas

Opa!

Pra vc fazer essa conexão aí, depende do servidor web enxergar o container mysql.

Então onde tem localhost vc deveria por o nome do nó container -> (agenda_pet_db) seguido da porta pra pode conseguir.

Problema tá na comunicação entre eles, e o ip atribuído não é localhost***

Deu certo, porém não totalmente.

Acontece que quando eu uso o agenda_pet_db como host ele acessa o ipAddress e não o gateway, então não conecta, porém se eu colocar o gateway conecta corretamente.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue o docker inspect do container agenda_pet_db:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E por fim o erro constando que ele conecta no IpAddress e não no gateway:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Acredito que possa ser um erro no docker, mas não está impedindo o andamento do curso, so queria expor a situação.

A máquina do banco é ip: 172.21.0.2? Por que o host tá com ip .0.1?

Acho que o erro ta aí...

Essa é a situação Vinicius, ele se conecta pelo gateway não pelo Ip.

Execute a seguinte consulta no MYSQL

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Onde root como seu usuário localhostcomo seu URL e password como sua senha

Em seguida, execute esta consulta para atualizar os privilégios:

flush privileges;

Tente se conectar usando o node depois de fazer isso.

Se isso não funcionar, tente sem @'localhost'parte.