3
respostas

Erro ao tentar conectar com o banco de dados

Estou a muito tempo ja tentando me conectar com o banco de dados com minha API, mas sempre que tento rodar o serve ele da um erro.
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
isso foi depois de eu tirar o srv do meu link pro banco "mongodb://conta1:senha123".
Quando estava com o srv estava desse jeito:Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ja vis todo o processos qu pesquisei pra resolver mas n funciona nada, ja estou com o user 0.0.0.0/0 criado tambem no Atlas, mas ainda n funciona

3 respostas

Oi, Gabriel! Como vai?

Vendo o erro que apareceu, existem dois pontos importantes acontecendo na sua conexão com o MongoDB Atlas:

1. Erro de DNS com o SRV
O erro: ECONNREFUSED querySrv _mongodb._tcp.projeto1.gxecxab.mongodb.net significa que o Node não conseguiu resolver o endereço DNS do cluster. Isso acontece quando:

  • A string de conexão foi alterada incorretamente;
  • Foi removido o +srv da URL;
  • A conexão não foi configurada corretamente.

No MongoDB Atlas, o recomendado é usar sempre a conexão com +srv. Exemplo correto de conexão:

<pre><code class="language-html">
const mongoose = require("mongoose");

async function conectaBanco() {
  try {
    await mongoose.connect("mongodb+srv://conta1:senha123@projeto1.gxecxab.mongodb.net/teste");
    console.log("Banco conectado");
  } catch (erro) {
    console.log("Erro de conexao:", erro);
  }
}

module.exports = conectaBanco;
</code></pre>

O que esse código faz:

  • Importa o mongoose;
  • Tenta conectar ao MongoDB Atlas;
  • Se conectar, mostra Banco conectado;
  • Se falhar, mostra o erro.

2️. String de conexão sem SRV precisa de mais configuracoes

Quando você remove o +srv, precisa informar host, replica set e ssl, algo assim:

<pre><code class="language-html">
mongodb://conta1:senha123@projeto1-shard-00-00.gxecxab.mongodb.net:27017,projeto1-shard-00-01.gxecxab.mongodb.net:27017,projeto1-shard-00-02.gxecxab.mongodb.net:27017/?ssl=true&replicaSet=atlas-xxxxx-shard-0&authSource=admin
</code></pre>

Por isso, no curso, não removemos o +srv**, pois ele simplifica tudo.

Siga esses passos para resolver:

  1. Entre no MongoDB Atlas
  2. Clique em Database
  3. Clique em Connect
  4. Clique em Drivers
  5. Copie exatamente a string de conexao

Ela será parecida com:


mongodb+srv://usuario:senha@cluster0.xxxxx.mongodb.net/nomeDoBanco

Depois use no seu código.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Ola Armano desde já queria agredecer pela atenção, com suas instruções consegui me conectar ao Banco de dados, porem estou com um outro problema que não estava antes, meu local host nao esta funcionando, apesar de que no meu Network Access do MongoAtlas esteja meu endereço de ip normalmente, mas quando eu tento usar meu local host ele carrega sem parar e nao me da resultado.
Nao faço ideia do que possa ser mas lembrei de que quando instalei o Mogoose no meu Nodejs ele deu diversos erros nao sei por que e tambem nao sei se tem algo a ver ( pra deixar claro eu acesso meu local host assim: localhost:3000/ )
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi, Gabriel! Peço desculpas pela demorar em responder!

Obrigado por trazer mais contexto. O fato de o localhost ficar carregando sem responder mostra que o problema agora não é o Network Access do Atlas, e sim que sua API não está finalizando a requisição ou não está iniciando corretamente.

Faça estas 3 verificações no seu projeto:

  1. Confirme se o servidor está realmente subindo na porta 3000: no seu index.js, precisa existir o app.listen(...) e aparecer uma mensagem no terminal quando o servidor iniciar.

    import express from "express";
    
     const app = express();
    
     app.get("/", (req, res) => {
       res.send("API funcionando");
     });
    
     app.listen(3000, () => {
       console.log("Servidor rodando na porta 3000");
     });
     

    Se essa mensagem não aparecer no terminal, então o servidor nem chegou a iniciar.

  2. Garanta que a rota / está enviando resposta: se você acessa localhost:3000/ e a página fica carregando sem parar, normalmente o problema é que a rota foi criada, mas não tem res.send(), res.json() ou res.end().

    Ajuste assim:

    app.get("/", (req, res) => {
       res.send("API funcionando corretamente");
     });
     

    Se a rota estiver assim, por exemplo, ela vai travar:

    app.get("/", (req, res) => {
       console.log("rota acessada");
     });
     

    Neste caso, o navegador espera uma resposta que nunca chega.

  3. Não deixe a conexão com o banco bloquear o carregamento da aplicação: no arquivo de conexão, conecte ao MongoDB e trate erro com catch. No index.js, suba o servidor mesmo com a conexão sendo feita de forma organizada.

    Ajuste seu código assim:

    // dbConnect.js
     import mongoose from "mongoose";
    
     async function conectaNoBanco() {
       try {
         await mongoose.connect("SUA_STRING_DE_CONEXAO");
         console.log("Conexão com MongoDB feita com sucesso");
       } catch (erro) {
         console.error("Erro ao conectar no MongoDB:", erro.message);
       }
     }
    
     export default conectaNoBanco;
     
    // index.js
     import express from "express";
     import conectaNoBanco from "./dbConnect.js";
    
     const app = express();
     conectaNoBanco();
    
     app.get("/", (req, res) => {
       res.send("API funcionando");
     });
    
     app.listen(3000, () => {
       console.log("Servidor rodando em http://localhost:3000");
     });
     

Com o que você descreveu, o teste mais direto é este: coloque essa rota / com res.send("API funcionando"), rode o servidor e veja se o terminal mostra "Servidor rodando em http://localhost:3000".

Se aparecer e ainda assim travar, então o ponto a revisar é o conteúdo atual do seu index.js, porque o problema está na estrutura da rota ou no app.listen().

Fico à disposição!