J'ai une classe de wrapper de base de données qui établit une connexion à 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:
(noeud: 4833) DeprecationWarning: l'analyseur de chaîne d'URL actuel est obsolète et sera supprimé dans une version ultérieure. Pour utiliser le nouvel analyseur, passez 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 également essayé de définir ces propriétés dans la chaîne de connexion comme suit: 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 que ces avertissements génèrent du spam.
J'utilise le pilote mongodb
dans la version 3.1.0-beta4
avec le package @types/mongodb
correspondant dans 3.0.18
. Les deux sont les dernières disponibles en utilisant npm install
.
En utilisant une ancienne version du pilote mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
Vérifiez votre version de 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 mangouste vers ->
mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });
Idéalement, il s’agit d’une fonctionnalité de la version 4, mais elle est également prise en charge par les versions 3.1.0 et supérieures. Consultez MongoDB Github pour plus de détails.
Comme indiqué, la version 3.1.0-beta4
du pilote a été "relâchée dans la nature" un peu tôt par l'apparence. Cette version fait partie des travaux en cours visant à prendre en charge les nouvelles fonctionnalités de la prochaine version de MongoDB 4.0 et à apporter d'autres modifications à l'API.
L’une des modifications qui a déclenché l’avertissement actuel est l’option useNewUrlParser
, en raison de certaines modifications apportées au fonctionnement de la transmission de l’URI de la connexion. Plus sur cela plus tard.
Jusqu'à ce que les choses se "calment", il serait probablement souhaitable de "épingler" au moins à la version mineure pour les versions de 3.0.x
:
"dependencies": {
"mongodb": "~3.0.8"
}
Cela devrait empêcher la branche 3.1.x
d'être installée sur des installations "récentes" sur des modules de noeud. Si vous avez déjà installé une "dernière" version qui est la version "bêta", vous devez alors nettoyer vos packages (et package-lock.json
) et vous assurer de la réduire à une version de la série 3.0.x
.
En ce qui concerne l'utilisation des "nouvelles" options d'URI de connexion, la principale restriction consiste à inclure réellement la variable 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 "stricte" dans le nouveau code. Le point principal étant que le code actuel fait essentiellement partie du code du référentiel "node-native-driver" (npm mongodb
), et que le "nouveau code" est en réalité importé à partir de la bibliothèque mongodb-core
qui "sous-tend "le pilote de noeud" public ".
L’option "option" ajoutée vise à "faciliter" la transition en ajoutant l’option au nouveau code afin que le nouvel analyseur (actuellement basé sur url
) soit utilisé dans le code en ajoutant l’option et en supprimant l’avertissement de désapprobation. et par conséquent, en vérifiant que vos chaînes de connexion transmises sont conformes aux attentes du nouvel analyseur.
Dans les versions à venir, l'analyseur "hérité" sera supprimé et le nouvel analyseur sera 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 aux attentes du nouvel analyseur.
Par conséquent, si vous souhaitez commencer à utiliser les nouvelles fonctionnalités du pilote au fur et à mesure de leur publication, utilisez les versions disponibles beta
et suivantes et veillez idéalement à fournir une chaîne de connexion valide pour le nouvel analyseur en activant l'option useNewUrlParser
dans MongoClient.connect()
.
Si vous n'avez pas réellement besoin d'accéder aux fonctionnalités liées à la prévisualisation de la version MongoDB 4.0, épinglez la version à une série 3.0.x
, comme indiqué précédemment. Cela fonctionnera comme documenté et "épinglant" cela garantit que les versions de 3.1.x
ne sont pas "mises à jour" par rapport à la dépendance attendue jusqu'à ce que vous souhaitiez réellement installer une version stable.
Le code en surbrillance ci-dessous indiquant la connexion d'une mangouste a résolu l'avertissement concernant le conducteur de mangouste
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
Le format de la chaîne de connexion doit être: mongodb: // utilisateur: mot de passe @ hôte: port/db
par exemple:
MongoClient.connect('mongodb://user:[email protected]:27017/yourDB', { useNewUrlParser: true } )
Besoin d'ajouter{ useNewUrlParser: true }
dans la méthode mongoose.connect ().
mongoose.connect('mongodb://localhost:27017/Notification',{ useNewUrlParser: true });
Rien à changer, ne passez que 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();
}
})
Le problème peut être résolu en donnant le numéro de port et en utilisant cet analyseur.
mongoose.connect("mongodb://localhost:27017/cat_app", { useNewUrlParser: true });
Cela résout mon problème.
Je ne pense pas que vous ayez besoin d'ajouter { useNewUrlParser: true }
.
C’est à vous de décider si vous souhaitez déjà utiliser le nouvel analyseur d’URL. Finalement, l’avertissement disparaîtra lorsque Mongo bascule vers son nouvel analyseur d’URL.
Edit: Comme spécifié ici https://docs.mongodb.com/master/reference/connection-string/ vous n'avez pas besoin de définir le numéro de port.
Ajouter simplement { useNewUrlParser: true }
suffit.
Voici comment je l'ai, l'indication n'apparaissant pas sur ma console jusqu'à ce que je mette à jour npm quelques jours auparavant.
.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.");
});
il vous suffit d'ajouter
{useNewUrlParser: true}
dans la méthode mongoose.connect
L'exemple complet pour les envois expressJS, les appels api et l'envoi json est le suivant:
...
app.get('/api/myApi', (req, res) => {
MongoClient.connect('mongodb://user:[email protected]:port/dbname', { useNewUrlParser: true }, (err, db) => {
if (err) throw err
const dbo = db.db('dbname')
dbo.collection('myCollection')
.find({}, { _id: 0 })
.sort({ _id: -1 })
.toArray(
(errFind, result) => {
if (errFind) throw errFind
const resultJson = JSON.stringify(result)
console.log('find:', resultJson)
res.send(resultJson)
db.close()
},
)
})
}
Le code de démo ES8 incorrect que MongoDB inc fournit crée également cet avertissement.
MongoDB fournit les conseils suivants, qui sont incorrects
Pour utiliser le nouvel analyseur, passez l'option {useNewUrlParser: true} à MongoClient.connect.
Cela provoquera l'erreur suivante:
TypeError: le dernier argument de
executeOperation
doit être un rappel
Au lieu de cela, l'option doit être fournie à new MongoClient
:
Voir le code ci-dessous:
const DATABASE_NAME = 'mydatabase',
URL = `mongodb://localhost:27017/${DATABASE_NAME}`
module.exports = async function() {
const client = new MongoClient(URL, {useNewUrlParser: true})
var db = null
try {
// Note this breaks.
// await client.connect({useNewUrlParser: true})
await client.connect()
db = client.db(DATABASE_NAME)
} catch (err) {
console.log(err.stack)
}
return db
}
Ces lignes ont également fait l'affaire pour tous les autres avertissements de dépréciation:
const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);
Si username
ou password
a @
caractère. Alors utilise comme ça
mongoose
.connect(
'DB_url',
{ user: '@dmin', pass: 'p@ssword', useNewUrlParser: true }
)
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.log('Could not connect to MongoDB', err));
J'utilisais mlab.com comme base de données Mongo. J'ai séparé la chaîne de connexion dans un autre dossier nommé config et à l'intérieur de keys.js. J'ai conservé la chaîne de connexion qui était
module.exports = {
mongoURI: "mongodb://username:[email protected]: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.
tout simplement vous devez faire:
mongoose.connect(connectionString,{ useNewUrlParser: true }
//or
MongoClient.connect(connectionString,{ useNewUrlParser: true }