Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js

Solução de problemas de conexão

Nesta página

  • Erro de conexão
  • Verifique sua connection string
  • Configurar firewall
  • Erro ECONNREFUSED
  • Certifique-se de que o MongoDB e seu cliente usem o mesmo protocolo
  • Erro de ECONNRESET
  • Controle o número de descritores de arquivos
  • Erro de autenticação
  • Verifique sua connection string
  • Verificar se o usuário está no banco de dados de autenticação
  • Erro ao enviar mensagem
  • Verifique as permissões do usuário
  • Configurar firewall
  • Verifique o número de conexões
  • Muitas conexões abertas
  • Verifique o número de conexões
  • Erro de tempo limite
  • Definir connectTimeoutMS
  • Verifique o número de conexões

Esta página oferece soluções potenciais para problemas que você pode encontrar ao usar o driver MongoDB Node.js para se conectar a uma implantação do MongoDB.

Observação

Esta página aborda apenas problemas de conexão. Se você encontrar qualquer outro problema com o MongoDB ou com o driver, acesse os seguintes recursos:

  • As Perguntas frequentes (FAQ) para o driver do Node.js

  • A página Problemas e ajuda , que contém informações sobre como reportar bugs, contribuir para o driver e encontrar mais recursos

  • Os fóruns da MongoDB Community para perguntas, discussões ou suporte técnico geral

A seguinte mensagem de erro indica que o driver não pode se conectar a um servidor no nome de host ou porta especificada. Várias situações podem gerar essa mensagem de erro. Nesta mensagem de erro de exemplo, o nome do host é 127.0.0.1 e a porta é 27017:

Error: couldn't connect to server 127.0.0.1:27017

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Verifique se o nome do host e o número da porta na connection string são precisos. O valor de porta padrão para uma instância do MongoDB é 27017, mas você pode configurar o MongoDB para se comunicar em outra porta.

Verifique se as portas nas quais seu MongoDB deployment escuta não estão bloqueadas por um firewall na mesma rede. O MongoDB usa a porta 27017 por padrão. Para saber mais sobre as portas padrão que o MongoDB usa e como alterá-las, consulte Porta padrão do MongoDB.

Aviso

Não abra uma porta no firewall, a menos que tenha certeza de que é a porta usada pelo MongoDB deployment.

Se a conexão for recusada quando o driver tentar se conectar à instância do MongoDB, ele gerará esta mensagem de erro:

MongoServerSelectionError: connect ECONNREFUSED <IPv6 address>:<port>

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

No Node.js v17 e versões posteriores, o resolvedor DNS usa IPv6 por padrão se o cliente e o host oferecem suporte a ambos. Por exemplo, se o MongoDB usar IPv4 e seu cliente usar IPv6, o driver gerará a mensagem de erro anterior.

Você pode configurar sua implantação do MongoDB para usar o modo IPv6 ao iniciar com mongod ou mongos. Para obter mais informações sobre como especificar o modo IPv6, consulte Vinculação de IP no manual do servidor.

Você também pode usar IPv4 o com seu cliente especificando o family: 4 como uma opção para seu MongoClient.

const client = new MongoClient(uri, {
family: 4,
});

Se a conexão for reiniciada quando o driver chamar client.connect(), ele gerará esta mensagem de erro:

MongoServerSelectionError: connect ECONNRESET ::<IP address>:<port>

A seção a seguir descreve um método que pode ajudar a resolver o problema.

Um descritor de arquivo é um identificador único associado a um processo aberto. Na maioria dos sistemas operacionais, cada conexão aberta do driver é associada a um descritor de arquivos. Os sistemas operacionais normalmente têm um limite de número de descritores de arquivos usados por um único processo. Um erro ECONNRESET poderá ocorrer se o número de conexões exceder esse limite.

Para definir o número máximo de conexões, configure maxPoolSize. Para solucionar este erro, você pode diminuir o número máximo de conexões permitidas configurando o valor de maxPoolSize. Como alternativa, você pode aumentar o limite do descritor de arquivos em seu sistema operacional.

Aviso

Sempre tenha cuidado ao alterar a configuração do seu sistema operacional.

O driver do Node.js pode falhar ao conectar a uma instância do MongoDB se a autorização não estiver configurada corretamente. Se você estiver usando SCRAM-SHA-256 para fazer autenticação e o driver conecta, o driver poderá gerar uma mensagem de erro semelhante a uma das seguintes mensagens:

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server <hostname>:<port>.
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Uma connection string inválida é a causa mais comum de problemas de autenticação ao tentar se conectar ao MongoDB usando SCRAM-SHA-256.

Dica

Para obter mais informações sobre connection strings, consulte URI de conexão no Guia de conexão.

Se sua connection string contiver um nome de usuário e senha, certifique-se de que eles estejam no formato correto. Se o nome de usuário ou senha incluir qualquer um dos seguintes caracteres, eles devem usar codificação percentual:

: / ? # [ ] @

O exemplo abaixo mostra como codificar a porcentagem de "#MyP@assword?":

console.log(encodeURIComponent('#MyP@assword?'));

Isso resulta na seguinte saída:

"%23MyP%40assword%3F"

Para autenticar uma conexão corretamente usando um nome de usuário e uma senha com SCRAM-SHA-256, o nome de usuário deve ser definido no banco de dados de autenticação. O banco de dados de autenticação padrão é o banco de dados admin. Para usar outro banco de dados de autenticação, especifique o authSource na connection string. O exemplo abaixo orienta o driver a usar o users como banco de dados de autenticação:

const { MongoClient } = require("mongodb");
const uri = "mongodb://<username>:<password>@<hostname>:<port>/?authSource=users";
const client = new MongoClient(uri);

Você pode verificar se este é o problema tentando se conectar a uma instância do MongoDB hospedada na máquina local com o mesmo código. Um sistema na mesma máquina não exige qualquer autorização para se conectar.

Quando o driver não envia um comando após você fazer uma solicitação, ele pode exibir a seguinte mensagem de erro:

com.mongodb.MongoSocketWriteException: Exception sending message

As seções a seguir descrevem ações que você pode adotar para resolver o problema.

Verifique se você acessou o MongoDB deployment com o usuário correto. O termo "mensagem" no erro pode ser um comando enviado pelo driver. Se você estiver usando um usuário que não tem permissões para enviar o comando, o driver poderá gerar esse erro.

Certifique-se também de que o usuário tenha as permissões apropriadas para a mensagem que você está enviando. O MongoDB usa o RBAC (controle de acesso baseado em roles) para controlar o acesso a um MongoDB deployment. Para obter mais informações sobre como configurar o RBAC no MongoDB, consulte Porta padrão do MongoDB.

O firewall precisa ter uma porta aberta para se comunicar com a instância do MongoDB. Para obter mais informações sobre como configurar o firewall, consulte Configurar firewall na seção Erro de conexão.

Cada instância do MongoClient aceita um número máximo de conexões abertas simultâneas em seu pool de conexões. Você pode configurar o parâmetro maxPoolSize que define esse limite. O valor padrão é 100. Se já houver uma série de conexões abertas iguais a maxPoolSize, o servidor aguardará até que uma conexão se torne disponível. Se esse tempo de espera exceder o valor de maxIdleTimeMS, o driver responderá com um erro.

Para obter mais informações sobre como funciona o pool de conexões, consulte Como funciona o pool de conexões no driver de nó? na seção de Perguntas frequentes.

O driver cria a seguinte mensagem de erro quando tenta abrir uma conexão, mas atingiu o número máximo de conexões:

connection refused because too many open connections

A seção a seguir descreve um método que pode ajudar a resolver o problema.

Para criar mais conexões abertas, aumente o valor de maxPoolSize. Para obter mais informações sobre como verificar o número de conexões, consulte Verifique o número de conexões na seção Erro ao enviar mensagem.

Quando a rede não é capaz de entregar uma solicitação do driver para o servidor com rapidez suficiente, ela pode expirar. Quando isso acontece, você pode receber uma mensagem de erro semelhante à seguinte:

timed out while checking out a connection from connection pool: context canceled

Se você receber esse erro, tente a seguinte ação para resolver o problema.

O driver pode travar quando não consegue estabelecer uma conexão porque leva muito tempo tentando alcançar nós de conjuntos de réplicas inacessíveis. Você pode limitar o tempo que o driver gasta tentando estabelecer a conexão utilizando a configuração connectTimeMS . Para saber mais sobre essa configuração, consulte as Opções de tempo limite no manual do servidor.

Verifique se a configuração de connectTimeoutMS não é menor do que a latência de rede mais alta que você tem para um membro do conjunto. Se um dos membros secundários tiver uma latência de 10000 milissegundos, definir o connectTimeoutMS como 9000 impede que o driver se conecte a esse membro.

O exemplo a seguir define connectTimeoutMS em 10.000 milissegundos.

const client = new MongoClient(uri, {
connectTimeoutMS: 10000,
});

O número de conexões com o servidor pode exceder maxPoolSize. Para obter mais informações sobre como verificar o número de conexões, consulte Verificar o número de conexões na seção Mensagem de erro de envios.

← Perguntas frequentes