Éviter «l’avertisseur de chaîne URL en cours est déconseillé» en définissant useNewUrlParser sur true

J’ai une classe wrapper de firebase database qui établit une connexion à une instance de MongoDB:

async connect(connectionSsortingng: ssortingng): Promise { this.client = await MongoClient.connect(connectionSsortingng) this.db = this.client.db() } 

Cela m’a donné un avertissement:

(node: 4833) DeprecationWarning: l’parsingur de chaîne d’URL en cours est obsolète et sera supprimé dans une future version. Pour utiliser le nouvel parsingur, transmettez l’option {useNewUrlParser: true} à MongoClient.connect.

La méthode connect() accepte une instance MongoClientOptions comme second argument. Mais il n’a pas de propriété appelée useNewUrlParser . J’ai aussi essayé de définir ces propriétés dans la chaîne de connexion comme ceci mongodb://127.0.0.1/my-db?useNewUrlParser=true mais cela n’a aucun effet sur ces avertissements.

Alors, comment puis-je définir useNewUrlParser pour supprimer ces avertissements? Ceci est important pour moi, car le script doit être exécuté en tant que cron et ces avertissements entraînent un spam par courrier électronique.

J’utilise le pilote mongodb dans la version 3.1.0-beta4 avec le paquet @types/mongodb 3.0.18 dans la version 3.0.18 . Les deux sont les derniers disponibles en utilisant npm install .

solution de contournement

Utiliser une ancienne version du pilote mongodb:

"mongodb": "~3.0.8", "@types/mongodb": "~3.0.18"

Vérifiez votre version mongo

 mongo --version 

Si vous utilisez version> = 4.0.0, changez votre fichier de connexion mongo à ->

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

ou votre fichier de connexion mongoose à ->

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

Comme indiqué, la version 3.1.0-beta4 du pilote a été “lancée dans la nature” un peu plus tôt par l’apparence des choses. La version fait partie du travail en cours pour prendre en charge les nouvelles fonctionnalités de la prochaine version de MongoDB 4.0 et apporter d’autres modifications à l’API.

L’une de ces modifications qui déclenche l’avertissement en cours est l’option useNewUrlParser , en raison de certains changements sur la manière dont passe l’URI de connexion. Plus sur cela plus tard.

Jusqu’à ce que les choses soient “réglées”, il serait probablement préférable de “épingler” au moins la version mineure pour les versions 3.0.x :

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

Cela devrait empêcher l’ 3.1.x twig 3.1.x sur les “nouvelles” installations vers les modules 3.1.x . Si vous avez déjà installé une “dernière” version qui est la version “bêta”, vous devez alors nettoyer vos paquets (et package-lock.json ) et vous assurer que vous 3.0.x sur une version 3.0.x

En ce qui concerne l’utilisation des “nouvelles” options d’URI de connexion, la principale ressortingction consiste à inclure le port dans la chaîne de connexion:

 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) } })() 

C’est une règle plus “ssortingcte” dans le nouveau code. Le point principal étant que le code actuel fait essentiellement partie du code de référentiel “node-native-driver” (npm mongodb ), et que le “new code” importe réellement de la bibliothèque mongodb-core qui “sous-tend” le noeud “public” chauffeur.

Le sharepoint “l’option” étant ajouté est de “faciliter” la transition en ajoutant l’option au nouveau code pour que l’parsingur plus récent (basé autour de l’ url ) soit utilisé dans le code ajoutant l’option et efface l’avertissement de dépréciation. que vos chaînes de connexion transmises sont conformes à ce que le nouvel parsingur attend.

Dans les versions futures, l’parsingur «hérité» serait supprimé et le nouvel parsingur serait simplement ce qui est utilisé même sans l’option. Mais à ce moment-là, on s’attend à ce que tout le code existant ait amplement l’occasion de tester leurs chaînes de connexion existantes par rapport à ce que le nouvel parsingur attend.

Donc, si vous voulez commencer à utiliser les nouvelles fonctionnalités de pilote au fur et à mesure de leur publication, utilisez la version beta et les versions ultérieures et assurez-vous de fournir une chaîne de connexion valide pour le nouvel parsingur en activant l’option MongoClient.connect() dans MongoClient.connect() .

Si vous n’avez pas réellement besoin d’accéder aux fonctionnalités relatives à la prévisualisation de la version 4.0 de MongoDB, épinglez la version à une série 3.0.x , comme indiqué précédemment. Cela fonctionnera comme documenté et “épingler” cela garantit que les versions 3.1.x ne sont pas “mises à jour” sur la dépendance attendue jusqu’à ce que vous souhaitiez réellement installer une version stable.

Le code ci-dessous mis en évidence pour la connexion de type mongoose a résolu l’avertissement du pilote mongoose

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

Rien à changer, passez uniquement dans la fonction de connexion {useNewUrlParser: true } cela fonctionnera

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

Voici comment je l’ai, le conseil n’a pas montré sur ma console jusqu’à ce que j’ai mis à jour npm quelques jours avant.

.connect a 3 parameters, l’URI, les options et err.

 mongoose.connect( keys.getDbConnectionSsortingng(), { useNewUrlParser: true }, err => { if (err) throw err; console.log(`Successfully connected to database.`); } ); 

Le problème peut être résolu en donnant le numéro de port et en utilisant cet parsingur {useNewUrlParser: true}. la solution peut être:

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

Cela résout mon problème.

 **We were using** mongoose.connect("mongodb://localhost/mean-course").then( (res) => { console.log("Connected to Database Successfully.") } ).catch(() => { console.log("Conntection to database failed."); }); *-----> This gives url parser error* **Correct Syntax is**: mongoose.connect("mongodb://localhost:27017/mean-course" , { useNewUrlParser: true }).then( (res) => { console.log("Connected to Database Successfully.") } ).catch(() => { console.log("Conntection to database failed."); }); 

J’utilisais mlab.com comme firebase database mongo. J’ai séparé la chaîne de connexion à un dossier différent nommé config et à l’intérieur de keys.js J’ai gardé la chaîne de connexion qui était

 module.exports = { mongoURI: "mongodb://username:password@ds147267.mlab.com:47267/projectname" };