A melhor maneira de manipular 'MongoError: falha ao conectar ao servidor na primeira conexão' no Mongoose

2

Neste problema do GitHub para o mongoose , o desenvolvedor afirmou que o comportamento pretendido é travar o processo do Node.js se a conexão inicial do banco de dados com o MongoDB falhar. Ele faz isso em vez de tentar se reconectar.

No meu código eu recebo esse erro porque quero registrá-lo.

var mongooseOptions = { 
    useMongoClient: true,
    reconnectInterval: 10000,
    reconnectTries: Number.MAX_VALUE 
};

mongoose.connect(connectionString, mongooseOptions)
    .catch(err => {
        logger.error('Mongodb first connection failed: ' + err.stack);
        // what to do here? - process.exit(0); maybe?
    });

Mas depois disso, qual é a melhor prática a ser feita? travar o processo? ou escrever minha própria lógica de reconexão? Eu devo mencionar que o mongodb.service está listado como um requisito para o node.service iniciar (usando o systemd no linux).

[Unit]
After=mongodb.service
...

Eu também não tenho certeza quantas vezes posso esperar para ver isso acontecer.

Também usei este guia , mas não consigo encontrar uma resposta clara.

    
por NG. 05.12.2017 / 15:08

1 resposta

1

Também estou procurando uma resposta para sua pergunta. Até agora, em minha pesquisa, acredito que o processo de chamada.exite é o melhor método. Porque o Mongoose permite que você comece a usar seus modelos imediatamente, sem esperar que o mangusto estabeleça uma conexão com o MongoDB. Isso porque a função do modelo de buffers de mangusto chama internamente.

A partir do Mongoose 5.0.10 - O Mongoose não apresentará nenhum erro por padrão se você usar um modelo sem se conectar.

Se a sua conexão não conseguir se reconectar, seu aplicativo está pensando que está executando as operações do modelo por meio do buffer, quando na verdade ele falhará.

Eu vi desenvolvedores adicionar mais um URI do Mongodb assim:

mongoose.connect(URI1||URI2);
Em última análise, você vai querer garantir que seu aplicativo sempre será capaz de se conectar ao banco de dados em vez de executar funções de modelo no buffer em futilidade.

Há uma opção para desativar o buffer, mas não tenho certeza de como isso afetará o desempenho.

    
por 16.03.2018 / 17:14