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'.
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.
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ção
useNewUrlParser' 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.
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();
}
})