Evite " o analisador de strings URL atual é depreciado" aviso definindo o usoNewUrlParser como verdadeiro
Eu tenho uma classe de embalagem 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()
}
Isto deu-me um aviso:
(nó:4833) DepreciaçãoAviso: o analisador de strings URL atual é depreciado, e será removido em uma versão futura. Para usar o novo analisador, passe a opção { useNewUrlParser: true } para MongoClient.connect.
O método connect()
aceita uma instância MongoClientOptions' como segundo argumento. Mas ele não't tem uma propriedade chamada
useNewUrlParser. Eu também tentei definir essas propriedades na string de conexão desta forma:
mongodb://127.0.0.1/my-db?useNewUrlParser=true` mas não tem nenhum efeito sobre esses avisos.
Então, como posso definir 'useNewUrlParser' para remover esses avisos? Isto é importante para mim já que o script deve rodar como cron e esses avisos resultam em lixo eletrônico.
I'm utilizando o driver mongodb
na versão 3.1.0-beta4
com o pacote correspondente @types/mongodb
em 3.0.18
. Ambos são os últimos disponíveis utilizando o `npm install'.
Solução
Usando uma versão mais antiga do driver mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
Verifique a sua versão mongo
Se você estiver usando a versão >= 3.1.0 mude seu arquivo de conexão mongo para ->
ou o seu ficheiro de ligação mongoose a ->
Idealmente, it's é uma versão 4 mas a v3.1.0 e superior também a suporta. Confira MongoDB Github para detalhes.
Como notado no
3.1.0-beta4
, o motorista foi liberado no " um pouco cedo pela aparência das coisas. O lançamento é parte do trabalho em andamento para suportar as novas funcionalidades do MongoDB 4.0 e fazer algumas outras alterações na API.Uma dessas alterações que aciona o aviso atual é a opção `useNewUrlParser', devido a algumas mudanças em torno de como passar a conexão URI realmente funciona. Mais sobre isso mais tarde.
Até as coisas "assentar", provavelmente seria aconselhável para "pin" pelo menos para a versão menor para lançamentos
3.0.x
:Isso deve impedir a instalação do ramo
3.1.x
no "fresh" instalações para módulos de nós. Se você já instalou um "latest" release que é o "beta" version, então você deve limpar seus pacotes ( epackage-lock.json
) e ter certeza de que você vai descer para um lançamento da série3.0.x
.Quanto a realmente utilizar o "new" opções URI de conexão, a principal restrição é realmente incluir o
port
na string de conexão:That's a more "strict" rule in the new code. O ponto principal é que o código atual é essencialmente parte do "node-native-driver" ( npm
mongodb
) código do repositório, e o "new code" na verdade importa da bibliotecamongodb-core
que "underpins" o "public" driver do nó.O ponto do "opção" ser adicionado é para "facilidade" a transição adicionando a opção ao novo código para que o novo analisador ( atualmente baseado em
url
) esteja sendo utilizado no código adicionando a opção e limpando o aviso de depreciação e, portanto, verificando se as suas cordas de conexão passadas em realmente estão de acordo com o que o novo analisador está esperando.Em lançamentos futuros o 'legacy' parser seria removido e então o novo parser será simplesmente o que é usado mesmo sem a opção. Mas nessa altura, espera-se que todo o código existente tenha tido ampla oportunidade de testar suas cordas de conexão existentes contra o que o novo parser está esperando.
Portanto, se você quiser começar a utilizar novos recursos de driver à medida que eles são lançados, então utilize a
beta' disponível e as versões subsequentes e, idealmente, certifique-se de que você está fornecendo uma string de conexão que é válida para o novo analisador, ativando a opção
useNewUrlParser' emMongoClient.connect()
.Se você não't realmente precisa de acesso a recursos relacionados à pré-visualização da versão MongoDB 4.0, então aperte a versão para uma série
3.0.x
como observado anteriormente. Isto funcionará como documentado e "pinning" isto assegura que as versões3.1.x
não sejam "updated" sobre a dependência esperada até que você realmente queira instalar uma versão estável.Nada a mudar, passe apenas na função connect
{useNewUrlParser: true }
isto irá funcionar