Seguindo a aula de conexão inicial ao MongoDB via Mongoose tive um problema na hora da conexão, toda hora apresentava esse erro de ENODATA, o que me deixava encucado já que era um 'suposto' erro de 'não retorno de dados', não parecia ser um erro de conexão propriamente... Dei uma googlada e caí no fórum do MongoDB e também no StackOverflow e pra tentar resumir algumas 'soluções' desse problema e tentar explicar a causa.
Causa: Tudo indica que é/seria a internet/provedor/dns que bloqueava a conexão 'via srv' mongodb+srv://, então as soluções eram:
Alterar o DNS usado na conexão. Algumas pessoas resolveram nesse formato, tentei usar o DNS do google e OpenDNS, mas nenhum funcionou, então pelo menos pra mim essa opção não funcionou.
Alterar o link de conexão para versão 2.2.12 do Node Então, esse funcionou, no caso o protocolo muda para mongodb:// o que me faz achar que o problema era/é realmente o srv.
Então assim... o problema foi resolvido, mas eu não tenho certeza do motivo, então quero tentar entender o que poderia ser, será que seria minha internet bloqueando esse tipo de protocolo?
Conexão mostrada no Vídeo da aula
//mongoose.connect(`mongodb+srv://${username}:${password}@${cluster}.eef4pue.mongodb.net/${dbname}`)
// .catch(e => console.log(e))
Conexão modificada e funcionando
mongoose.connect(`mongodb://${username}:${password}@ac-udocqcl-shard-00-00.eef4pue.mongodb.net:27017,ac-udocqcl-shard-00-01.eef4pue.mongodb.net:27017,ac-udocqcl-shard-00-02.eef4pue.mongodb.net:27017/${dbname}?ssl=true&replicaSet=atlas-51e6a4-shard-0&authSource=admin&retryWrites=true&w=majority`)
// .catch(e => console.log(e))
Eu coloquei em variáveis porque estava alterando nos testes e facilitou assim, cheguei a recriar o cluster nos testes.
A, coloquei o .catch pra pegar o erro, mas pelo que entendi da no mesmo do db.on("error", console.log.bind(console, 'Erro de Conexão'))
, então comentei depois de um tempo, mas deixei no código pra me lembrar disso.