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 chamadauseNewUrlParser. 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

mongo --version

Se você estiver usando a versão >= 3.1.0 mude seu arquivo de conexão mongo para ->

MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })

ou o seu ficheiro de ligação mongoose a ->

mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });

Idealmente, it's é uma versão 4 mas a v3.1.0 e superior também a suporta. Confira MongoDB Github para detalhes.

Comentários (4)

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:

  "dependencies": {
    "mongodb": "~3.0.8"
  }

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 ( e package-lock.json ) e ter certeza de que você vai descer para um lançamento da série 3.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:

const { MongoClient } = require("mongodb");
const uri = 'mongodb://localhost:27017';  // mongodb://localhost - will fail

(async function() {
  try {

    const client = await MongoClient.connect(uri,{ useNewUrlParser: true });
    // ... anything

    client.close();
  } catch(e) {
    console.error(e)
  }

})()

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 biblioteca mongodb-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çãouseNewUrlParser' em MongoClient.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ões 3.1.x não sejam "updated" sobre a dependência esperada até que você realmente queira instalar uma versão estável.

Comentários (2)

Nada a mudar, passe apenas na função connect {useNewUrlParser: true } isto irá funcionar

MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
  if(err){
      console.log(err);
  }
  else {
      console.log('connected to '+ url);
      db.close();
  }
})
Comentários (2)