Eu tenho uma classe de wrapper de banco de dados que estabelece uma conexão com alguma instância do MongoDB:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
Isso me deu um aviso:
(nó: 4833) DeprecationWarning: o analisador de cadeia de URL atual foi descontinuado e será removido em uma versão futura. Para usar o novo analisador, passe a opção {useNewUrlParser: true} para MongoClient.connect.
O connect()
método aceita uma MongoClientOptions
instância como segundo argumento. Mas não tem uma propriedade chamada useNewUrlParser
. Também tentei definir essas propriedades na cadeia de conexão como esta: mongodb://127.0.0.1/my-db?useNewUrlParser=true
mas não tem efeito sobre esses avisos.
Então, como posso definir useNewUrlParser
para remover esses avisos? Isso é importante para mim, pois o script deve ser executado como cron e esses avisos resultam em spam de lixo eletrônico.
Estou usando o mongodb
driver na versão 3.1.0-beta4
com o @types/mongodb
pacote correspondente 3.0.18
. Ambos são os mais recentes disponíveis npm install
.
Gambiarra
Usando uma versão mais antiga do driver mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
beta
versão que de alguma forma foi lançada na NPM no fim de semana. Não se preocupe até que a API seja finalizada. Você fez a coisa certa ao instalar uma versão estável.Respostas:
Verifique sua
mongo
versão:Se você estiver usando a versão> = 3.1.0, altere seu
mongo
arquivo de conexão para ->ou seu arquivo de conexão mangusto para ->
Idealmente, é um recurso da versão 4, mas a v3.1.0 e superior também o suportam. Confira o MongoDB GitHub para obter detalhes.
fonte
Como observado, a
3.1.0-beta4
liberação do driver foi "liberada na natureza" um pouco cedo pela aparência das coisas. O lançamento faz parte do trabalho em andamento para oferecer suporte a novos recursos do MongoDB 4.0 e fazer outras alterações na API.Uma dessas alterações que acionam o aviso atual é a
useNewUrlParser
opção, devido a algumas alterações na forma como a transmissão do URI da conexão realmente funciona. Mais sobre isso mais tarde.Até que as coisas se acalmem, provavelmente seria aconselhável "fixar" pelo menos a versão menor para
3.0.x
lançamentos:Isso deve impedir que a
3.1.x
ramificação seja instalada em instalações "novas" nos módulos do nó. Se você já instalou uma versão "mais recente", que é a versão "beta", limpe seus pacotes (epackage-lock.json
) e certifique-se de incluir a3.0.x
versão em série.Quanto ao uso das "novas" opções de URI da conexão, a principal restrição é realmente incluir a
port
string de conexão:Essa é uma regra mais "estrita" no novo código. O ponto principal é que o código atual é essencialmente parte do
mongodb
código do repositório "node-native-driver" (npm ) e o "novo código" realmente importa damongodb-core
biblioteca que "sustenta" o driver do nó "público".O ponto da "opção" que está sendo adicionada é "facilitar" a transição adicionando a opção ao novo código, para que o analisador mais recente (atualmente baseado em torno de
url
) esteja sendo usado no código que adiciona a opção e apaga o aviso de descontinuação e, portanto, verifica se suas cadeias de conexão transmitidas realmente estão de acordo com o que o novo analisador está esperando.Em versões futuras, o analisador 'legado' será removido e, em seguida, o novo analisador será simplesmente o que é usado, mesmo sem a opção. Porém, nesse momento, espera-se que todo o código existente tenha ampla oportunidade de testar suas cadeias de conexão existentes contra o que o novo analisador está esperando.
Então, se você quiser começar a usar os novos recursos do driver como eles são liberados, em seguida, usar os disponíveis
beta
lançamentos e subsequentes e, idealmente, certifique-se que você está fornecendo uma seqüência de conexão que é válido para o novo analisador, permitindo auseNewUrlParser
opção naMongoClient.connect()
.Se você realmente não precisa acessar recursos relacionados à visualização da versão MongoDB 4.0, atribua a versão a uma
3.0.x
série, conforme observado anteriormente. Isso funcionará conforme documentado e "fixar" isso garante que as3.1.x
liberações não sejam "atualizadas" sobre a dependência esperada até que você realmente deseje instalar uma versão estável.fonte
npm install mongodb
resultando na instalação do "beta" (claramente marcado na string de versão mostrada na pergunta), pois estava marcado comostable
no repositório npm quando não deveria ter sido. Na verdade, era um erro na época e sempre deve ser considerado, se qualquer liberação de código exibidaalpha
oubeta
dentro da string de versão for marcada como estável. Naturalmente, o tempo passou e esse é um recurso em versões estáveis agora, até que (como observado) acabe desaparecendo.O código destacado abaixo para a conexão do mangusto resolveu o aviso para o driver do mangusto:
fonte
Não há nada para mudar. Passe apenas na função de conexão
{useNewUrlParser: true }
.Isso funcionará:
fonte
Você precisa adicionar
{ useNewUrlParser: true }
o método mongoose.connect ().fonte
O formato da cadeia de conexão deve ser mongodb: // usuário: senha @ host: port / db
Por exemplo:
fonte
MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )
. Também funciona.Você só precisa definir o seguinte antes de conectar-se ao banco de dados, conforme abaixo:
Além disso,
fonte
correct
se ele funcionou para você. Funcionou para mim também!O seguinte funciona para mim
A
mongoose
versão é5.8.10
.fonte
body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
Eu não acho que você precise adicionar
{ useNewUrlParser: true }
.Você decide se já deseja usar o novo analisador de URL. Eventualmente, o aviso desaparecerá quando o MongoDB alternar para seu novo analisador de URL.
Conforme especificado no Formato URI da cadeia de conexão , você não precisa definir o número da porta.
Basta adicionar
{ useNewUrlParser: true }
é suficiente.fonte
useNewUrlParser: true
o aviso desaparecerá. Mas isso é um pouco estúpido, pois esse parâmetro extra se tornará obsoleto quando o mongo alternar para o novo analisador de URL.Atualizado para ECMAScript 8 / waitit
O código de demonstração ECMAScript 8 incorreto que o MongoDB inc fornece também cria esse aviso.
O MongoDB fornece os seguintes conselhos, incorretos
Fazer isso causará o seguinte erro:
Em vez disso, a opção deve ser fornecida para
new MongoClient
:Veja o código abaixo:
fonte
O problema pode ser resolvido fornecendo o número da porta e usando este analisador:
{useNewUrlParser: true}
A solução pode ser:
Isso resolve meu problema.
fonte
useNewUrlParser property
noconnect
, mas a sua solução ajudou. tão votado!O exemplo completo para Express.js, caso de chamada de API e envio de conteúdo JSON é o seguinte:
fonte
Aqui está como eu o tenho. A dica não apareceu no meu console até que eu atualizei a NPM alguns dias antes.
.connect possui três parâmetros, o URI, opções e err.
fonte
Estávamos usando:
→ Isso gera um erro no analisador de URL
A sintaxe correta é:
fonte
Você só precisa adicionar
dentro do método mongoose.connect.
fonte
O seguinte trabalho para mim para a versão 5.9.16
fonte
Essas linhas também fizeram o truque para todos os outros avisos de descontinuação:
fonte
Eu estava usando mlab.com como o banco de dados MongoDB. Separei a cadeia de conexão em uma pasta diferente chamada
config
e dentro do arquivo keys.js. Mantive a cadeia de conexão que era:E o código do servidor foi
Você precisa escrever {useNewUrlParser: true} após a cadeia de conexão, como fiz acima.
Simplificando, você precisa fazer:
fonte
Estou usando o mangusto versão 5.x para o meu projeto. Depois de exigir o pacote mangusto, defina o valor globalmente como abaixo.
fonte
Se
username
oupassword
tiver o@
personagem, use-o assim:fonte