281 votes

Évitez l'avertissement "l'analyseur de chaîne d'URL actuel est obsolète" en définissant la valeur "useNewUrlParser" à true.

J'ai une classe de base de données qui établit une connexion avec une instance de MongoDB :

async connect(connectionString: string): Promise<void> {
        this.client = await MongoClient.connect(connectionString)
        this.db = this.client.db()
}

Cela m'a donné un avertissement :

(node:4833) DeprecationWarning : l'analyseur de chaîne d'URL actuel est obsolète et sera supprimé dans une prochaine version. Pour utiliser le nouveau parseur, passez l'option { useNewUrlParser : true } à MongoClient.connect.

El connect() accepte un MongoClientOptions comme deuxième argument. Mais il n'y a pas de propriété appelée useNewUrlParser . J'ai également 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 régler useNewUrlParser pour supprimer ces avertissements ? C'est important pour moi car le script doit s'exécuter en cron et ces avertissements entraînent des spams en trash-mail.

J'utilise mongodb pilote en version 3.1.0-beta4 avec des @types/mongodb dans 3.0.18 . Les deux sont les plus récentes disponibles en utilisant npm install .

Solución

Utilisation d'une ancienne version du pilote mongodb :

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

6 votes

Cela vient de la beta qui, d'une manière ou d'une autre, a été publiée sur npm au cours du week-end. Ne vous en préoccupez pas tant que l'API n'est pas finalisée. Vous avez fait le bon choix en installant une version stable.

1 votes

Au-dessus de 3.0.0 de mongodb ajouter simplement mongoose.connect("mongodb://localhost:portnumber/YourDB", { useNewUrlParser : true })

448voto

Abhishek Sinha Points 2482

Vérifiez votre mongo version :

mongo --version

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

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

ou votre fichier de connexion Mongoose vers ->

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

Idéalement, il s'agit d'une fonctionnalité de la version 4, mais les versions 3.1.0 et supérieures la prennent également en charge. Consultez le site MongoDB GitHub pour les détails.

1 votes

@AbhishekSinha Pourquoi avec mongo >= 4.0.0 ? J'utilise la version 3.6.5 et le message gênant a également disparu.

0 votes

Oui, c'est réparé. En fait, il s'agit d'une fonctionnalité de la version 4, mais les versions 3.1.0 et supérieures prennent également en charge cette nouvelle fonctionnalité.

3 votes

C'est ce qu'il y a de mieux. Je voulais juste ajouter que si vous avez une fonction de rappel, par exemple en cas d'erreur, utilisez simplement ceci : mongoose.connect(dbUrl, { useNewUrlParser : true }, function(err) { console.log("mongoDB connected", err) ; }).

51voto

Neil Lunn Points 1

Comme l'a noté l' 3.1.0-beta4 version du pilote a obtenu "relâchés dans la nature" un peu plus tôt par les regards des choses. La libération est la partie des travaux en cours à l'appui de nouvelles fonctionnalités dans la MongoDB 4.0 version à venir, et de faire quelques autres modifications de l'API.

Un tel changement de déclenchement de l'actuelle avertissement est le useNewUrlParser option, en raison de certains changements autour du passage de l'URI de connexion fonctionne réellement. Plus sur cela plus tard.

Jusqu'à ce que les choses "s'installer", il serait sans doute souhaitable de "pin" au moins à la version mineure pour 3.0.x communiqués de:

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

Qui doit cesser l' 3.1.x de la branche est installé sur les "frais" installations de nœud de modules. Si vous avez déjà fait installer une "dernière" version qui est la "béta", alors vous devriez nettoyer vos paquets ( et package-lock.json ) et assurez-vous que vous vous cognez que jusqu'à une 3.0.x de diffusion de la série.

Que pour, en fait, à l'aide de la "nouvelle" URI de connexion des options, la principale restriction est pour inclure l' port sur 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 un peu plus "stricte" de la règle dans le nouveau code. Le point principal étant que le code actuel est essentiellement partie de la "nœud-native-pilote" ( mnp mongodb ) code de référentiel, et le "nouveau code" en fait, les importations de l' mongodb-core bibliothèque qui "soutient" le "public" nœud pilote.

Le point de la "option" ajouté est de "faciliter" le passage par l'ajout de l'option pour le nouveau code de sorte que le plus récent de l'analyseur ( en fait basé autour d' url ) est utilisée dans le code de l'ajout de l'option et la compensation de la dépréciation d'avertissement, et donc de vérifier que votre connexion chaînes passées à se conformer à ce que le nouveau parseur attend.

Dans les futures versions de l'héritage' analyseur serait supprimée et puis le nouvel analyseur sera simplement ce qui est utilisé même sans l'option. Mais, à l'époque, il est prévu que tout le code existant a eu amplement l'occasion de tester leurs chaînes de connexion à l'encontre de ce que le nouvel analyseur attend.

Donc, si vous voulez commencer à utiliser les nouvelles fonctionnalités du pilote comme ils sont libérés, puis l'utilisation de l' beta et les versions ultérieures et, idéalement, assurez-vous de fournir une chaîne de connexion qui est valable pour le nouvel analyseur en permettant à l' useNewUrlParser option en MongoClient.connect().

Si vous n'avez pas réellement besoin d'accéder à des fonctions liées à l'aperçu de la MongoDB version 4.0, puis la broche de la version à un 3.0.x série comme indiqué précédemment. Cela fonctionne comme documenté et "épingler" cela garantit que 3.1.x les rejets ne sont pas "mis à jour" sur la durée de la dépendance, jusqu'à ce que vous voulez vraiment installer une version stable.

1 votes

Avez-vous plus d'informations sur ce que vous voulez dire quand vous dites "r

2 votes

@Wyck La "référence" était bien sûr qu'au moment où la question a été posée, faisant npm install mongodb ce qui entraîne le "bêta" (clairement marqué dans la chaîne de version indiquée dans la question) étant installé depuis qu'il était marqué comme stable dans le dépôt npm alors qu'il n'aurait pas dû l'être. Il s'agissait en effet d'un erreur à l'époque et doit toujours être considéré comme tel si une version de code montrant alpha o beta dans la chaîne de version est également marquée comme stable. Naturellement, le temps a passé et c'est une fonctionnalité des versions stables maintenant, jusqu'à ce que (comme indiqué) elle disparaisse éventuellement.

47voto

Narendra Maru Points 199

Le code ci-dessous mis en évidence pour la connexion mongoose a résolu l'avertissement pour le pilote mongoose :

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

5 votes

Cela ne fonctionne pas pour moi. Je reçois toujours : (node:35556) DeprecationWarning : current URL string parser is deprecated, and will be removed in a future version. Pour utiliser le nouveau parseur, passez l'option { useNewUrlParser : true } à MongoClient.connect.

0 votes

Vous devez enregistrer server.js ou app.js à l'endroit où vous indiquez le chemin de la base de données. Si cela ne fonctionne toujours pas, essayez de supprimer et de réinstaller node_modules en entrant npm install à chaque fois que votre fichier package.json se trouve.

31voto

AAshish jha Points 502

Il n'y a rien à changer. Passez seulement dans la fonction de connexion {useNewUrlParser: true } .

Ça va marcher :

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

0 votes

Juste ce dont j'avais besoin, mais le message d'avertissement est toujours là :-S

0 votes

Ça marche pour moi, il n'y a plus d'avertissements.

20voto

KARTHIKEYAN.A Points 4408

Vous devez ajouter { useNewUrlParser: true } dans le mongoose.connect() méthode.

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

1 votes

Cette réponse est la même que d'autres réponses qui ont été postées des mois plus tôt

0 votes

En quoi cela diffère-t-il des réponses précédentes ?

0 votes

@PeterMortensen s'il vous plaît vérifier la date qui a posté la réponse en premier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X