Éviter l'avertissement "current URL string parser is deprecated" en mettant useNewUrlParser à true

j'ai une classe d'emballage de base de données qui établit une connexion à une instance 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 déprécié, et sera supprimé dans une version future. Pour utiliser le nouveau parser, passez l'option { useNewUrlParser: true } à MongoClient.connecter.

la méthode connect() accepte MongoClientOptions instance comme deuxième argument. Mais il n'a pas de propriété appelée useNewUrlParser . J'ai aussi essayé de mettre 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? C'est important pour moi puisque le script devrait fonctionner comme cron et que ces avertissements résultent en spam de courrier poubelle.

j'utilise mongodb pilote dans la version 3.1.0-beta4 avec le paquet correspondant @types/mongodb dans 3.0.18 . Tous les deux sont les derniers disponibles en utilisant npm install .

solution de contournement

utilisant une version plus ancienne du pilote mongodb:

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

69
demandé sur Lion 2018-05-21 14:50:41

10 réponses

vérifier votre version mongo

mongo --version

si vous utilisez la version > = 3.1.0 changez le fichier de connexion mongo en - >

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

ou votre fichier de connexion mongoose à - >

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

idéalement, c'est une fonctionnalité de version 4 mais v3.1.0 et au-dessus le soutient aussi. Vérifier MongoDB Github pour plus de détails.

126
répondu Abhishek Sinha 2018-09-25 06:14:33

comme noté le 3.1.0-beta4 libération du pilote a été" libéré dans la nature " un peu tôt par les regards 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 quelques autres changements à L'API.

L'option useNewUrlParser est l'un de ces changements qui déclenchent l'avertissement actuel, en raison de changements dans la façon dont le passage de L'URI de connexion fonctionne réellement. Plus sur cela plus tard.

Jusqu'à ce que les choses "s'installent", il serait probablement conseillé de "épingler " au moins à la version mineure pour 3.0.x sorties:

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

qui devrait empêcher l'installation de la branche 3.1.x sur des installations" fraîches " à des modules de noeuds. Si vous avez déjà installé une version" dernière "qui est la version "beta" , alors vous devriez nettoyer vos paquets (et package-lock.json ) et vous assurer de le ramener à une série 3.0.x publier.

comme pour l'utilisation effective des "nouvelles" options URI de connexion, la principale restriction est d'inclure effectivement le 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 une règle plus" stricte " dans le nouveau code. Le point principal étant que le code actuel fait essentiellement partie du "node-native-driver" ( npm mongodb ) code de dépôt, et le" nouveau code "importe effectivement de la mongodb-core bibliothèque qui" sous-tend" le pilote de noeud "public".

le point de l ' "option" étant ajouté est de "faciliter" la transition en ajoutant l'option au nouveau code de sorte que le nouvel analyseur (en fait basé sur url ) est utilisé dans le code en ajoutant l'option et en compensant l'avertissement de dépréciation, et donc en vérifiant que vos chaînes de connexion passées sont réellement conformes à ce que le nouvel analyseur attend.

dans les versions futures, l'analyseur' legacy ' sera supprimé et le nouvel analyseur sera tout simplement ce qui est utilisé même sans l'option. Mais d'ici là, on s'attend à ce que tous les codes existants aient eu amplement l'occasion de tester leurs chaînes de connexion existantes par rapport à ce que le nouvel analyseur attend.

donc si vous voulez commencer à utiliser les nouvelles fonctionnalités du pilote au fur et à mesure de leur sortie, utilisez la version disponible beta et les versions suivantes et idéalement assurez-vous de fournir une chaîne de connexion valide pour le nouvel analyseur en activant l'option useNewUrlParser dans MongoClient.connect() .

si vous n'avez pas besoin d'accéder aux fonctionnalités liées à l'aperçu de la version 4.0 de MongoDB, alors épinglez la version à une série 3.0.x comme indiqué ci-dessus. Cela fonctionnera comme documenté et "pinning" cela garantit que les versions 3.1.x ne sont pas "mises à jour" au-dessus de la dépendance attendue jusqu'à ce que vous vouliez réellement installer un la version stable.

31
répondu Neil Lunn 2018-07-04 19:43:33

ci-dessous code mis en évidence à la connexion mongoose résolu l'avertissement pour le conducteur mongoose

mongoose.connect('mongodb://localhost:27017/CGtruCust', { useNewUrlParser: true });
16
répondu Narendra Maru 2018-08-16 09:54:47

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

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

ça résout mon problème.

7
répondu Mehedi Abdullah 2018-07-29 19:57:57

Rien à changer, passer seulement dans la fonction connect {useNewUrlParser: true } cela fonctionne

MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){
  if(err){
      console.log(err);
  }
  else {
      console.log('connected to '+ url);
      db.close();
  }
})
6
répondu AAshish jha 2018-07-09 06:52:22

Voici comment je l'ai, l'indice ne s'est pas montré sur ma console jusqu'à ce que je mette à jour npm quelques jours avant.

.connect a 3 paramètres, L'URI, les options, et err.

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) throw err;
        console.log(`Successfully connected to database.`);
    }
);
4
répondu Hashasaur 2018-07-09 14:29:04
**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.");
});
2
répondu BASANT KUMAR 2018-08-04 04:14:22

j'utilisais mlab.com comme base de données mongo. J'ai séparé la chaîne de connexion à un dossier différent appelé config et à l'intérieur des clés.js j'ai gardé la chaîne de connexion qui était

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

et le code du serveur était

const express = require("express");
const mongoose = require("mongoose");
const app = express();

//DB config
const db = require("./config/keys").mongoURI;

//connect to mongo DB

mongoose
  .connect(
    db,
    { useNewUrlParser: true } //need this for api support
  )
  .then(() => console.log("mongoDB connected"))
  .catch(err => console.log(err));

app.get("/", (req, res) => res.send("hello!!"));

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`)); //tilda not inverted comma

vous devez écrire { useNewUrlParser: true } après la chaîne de connexion comme je l'ai fait ci-dessus.

simplement dit que vous devez faire :

mongoose.connect(connectionString,{ useNewUrlParser: true } 
//or
MongoClient.connect(connectionString,{ useNewUrlParser: true } 


      
0
répondu zibon 2018-08-16 08:43:08

ces lignes ont fait l'astuce pour tous les autres avertissements de dépréciation aussi:

const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);
0
répondu fedu 2018-09-10 20:57:21

Je ne pense pas que vous ayez besoin d'ajouter { useNewUrlParser: true } .

c'est à vous de décider si vous voulez déjà utiliser le nouvel analyseur d'url. Finalement, l'avertissement disparaîtra lorsque mongo passera à leur nouveau parser url.

assurez-vous simplement d'inclure le numéro de port dans la chaîne de caractères comme c'est ce que le nouvel analyseur d'url attend.

0
répondu Sam 2018-09-22 10:27:24