É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"
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.
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.
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 });
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.
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();
}
})
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.`);
}
);
**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 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 }
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);
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.