J'ai une classe d'encapsuleur 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:
(nœud: 4833) DeprecationWarning: l'analyseur de chaîne d'URL actuel est obsolète et sera supprimé dans une future version. Pour utiliser le nouvel analyseur, passez l'option {useNewUrlParser: true} à MongoClient.connect.
La connect()
méthode accepte une MongoClientOptions
instance comme deuxième 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 ceci: mongodb://127.0.0.1/my-db?useNewUrlParser=true
mais cela n'a aucun effet sur ces avertissements.
Alors, comment puis-je configurer useNewUrlParser
pour supprimer ces avertissements? Ceci est important pour moi car le script doit s'exécuter en tant que cron et ces avertissements entraînent un spam de corbeille.
J'utilise le mongodb
pilote dans la version 3.1.0-beta4
avec le @types/mongodb
package correspondant dans 3.0.18
. Les deux sont les derniers disponibles disponiblesnpm install
.
solution de contournement
Utilisation d'une ancienne version du pilote mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
beta
version qui a en quelque sorte été publiée sur npm au cours du week-end. Ne vous en faites pas tant que l'API n'est pas finalisée. Vous avez fait la bonne chose en installant une version stable.Réponses:
Vérifiez votre
mongo
version:Si vous utilisez la version> = 3.1.0, changez votre
mongo
fichier de connexion en ->ou votre fichier de connexion mangouste à ->
Idéalement, c'est une fonctionnalité de la version 4, mais la v3.1.0 et les versions ultérieures la prennent également en charge. Consultez MongoDB GitHub pour plus de détails.
la source
Comme indiqué, la
3.1.0-beta4
libération du pilote a été "libérée dans la nature" un peu tôt par l'apparence des choses. La version fait partie des travaux 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'un de ces changements déclenchant l'avertissement actuel est l'
useNewUrlParser
option, en raison de certains changements sur la façon dont le passage de l'URI de connexion fonctionne réellement. Plus sur cela plus tard.Jusqu'à ce que les choses "se calment", il serait probablement conseillé de "fixer " au moins la version mineure pour les
3.0.x
versions:Cela devrait empêcher l'
3.1.x
installation de la branche sur des installations "récentes" vers des modules de nœuds. Si vous avez déjà installé une «dernière» version qui est la version «bêta», vous devez nettoyer vos packages (etpackage-lock.json
) et vous assurer de les transférer vers une3.0.x
version de série.Quant à l'utilisation effective des "nouvelles" options d'URI de connexion, la principale restriction est en fait d'inclure le
port
dans la chaîne de connexion:C'est une règle plus "stricte" dans le nouveau code. Le point principal étant que le code actuel fait essentiellement partie du
mongodb
code du référentiel "node-native-driver" (npm ), et que le "nouveau code" est en fait importé dumongodb-core
bibliothèque qui "sous-tend" le pilote de nœud "public".Le point de "l'option" ajoutée est de "faciliter" la transition en ajoutant l'option au nouveau code de sorte que le nouvel analyseur (en fait basé sur
url
) soit utilisé dans le code ajoutant l'option et effaçant l'avertissement de dépréciation, et donc vérifiant que vos chaînes de connexion passées sont en fait conformes à ce que le nouvel analyseur attend.Dans les versions futures, l'analyseur «hérité» serait supprimé, puis le nouvel analyseur sera simplement ce qui est utilisé même sans l'option. Mais à ce moment-là, il est prévu que tout le code existant ait amplement l'occasion de tester leurs chaînes de connexion existantes par rapport à ce que le nouvel analyseur attend.
Donc, si vous souhaitez commencer à utiliser les nouvelles fonctionnalités du pilote au fur
beta
et à mesure de leur publication , utilisez les versions disponibles et suivantes et assurez-vous idéalement de fournir une chaîne de connexion valide pour le nouvel analyseur en activant l'useNewUrlParser
option inMongoClient.connect()
.Si vous n'avez pas réellement besoin d'accéder aux fonctionnalités liées à l'aperçu de la version MongoDB 4.0, épinglez la version à une
3.0.x
série comme indiqué précédemment. Cela fonctionnera comme documenté et "épinglé" cela garantit que les3.1.x
versions ne sont pas "mises à jour" sur la dépendance attendue jusqu'à ce que vous souhaitiez réellement installer une version stable.la source
npm install mongodb
qui entraînait l' installation de la "beta" (clairement indiquée dans la chaîne de version montrée dans la question) car elle était marquée commestable
dans le référentiel npm lorsqu'elle n'aurait pas dû l'être. Il s'agissait en effet d'une erreur à l'époque et doit toujours être pris en compte, donc si une version de code affichantalpha
oubeta
dans la chaîne de version est également marquée comme stable. Naturellement, le temps a passé et c'est une caractéristique des versions stables maintenant, jusqu'à ce que (comme indiqué) il finisse par disparaître.Le code en surbrillance ci-dessous pour la connexion mangouste a résolu l'avertissement du pilote mangouste:
la source
Il n'y a rien à changer. Passez uniquement dans la fonction de connexion
{useNewUrlParser: true }
.Cela fonctionnera:
la source
Vous devez ajouter
{ useNewUrlParser: true }
la méthode mongoose.connect ().la source
Le format de la chaîne de connexion doit être mongodb: // user: password @ host: port / db
Par exemple:
la source
MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )
marche aussi.Il vous suffit de définir les éléments suivants avant de vous connecter à la base de données comme ci-dessous:
Aussi,
la source
correct
si cela avait fonctionné pour vous. Cela a également fonctionné pour moi!Les travaux suivants pour moi
La
mongoose
version est5.8.10
.la source
body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
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 MongoDB passe à son nouvel analyseur d'URL.
Comme spécifié dans Connection String URI Format , vous n'avez pas besoin de définir le numéro de port.
Il suffit d'ajouter
{ useNewUrlParser: true }
.la source
useNewUrlParser: true
que l'avertissement disparaîtra. Mais c'est un peu stupide car ce paramètre supplémentaire deviendra obsolète une fois que mongo passera à son nouvel analyseur d'url.Mise à jour pour ECMAScript 8 / attente
Le code de démonstration ECMAScript 8 incorrect fourni par MongoDB inc crée également cet avertissement.
MongoDB fournit les conseils suivants, qui sont incorrects
Cela entraînera l'erreur suivante:
Au lieu de cela, l'option doit être fournie pour
new MongoClient
:Voir le code ci-dessous:
la source
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:
Cela résout mon problème.
la source
useNewUrlParser property
dansconnect
, mais votre solution a aidé. donc voté!L'exemple complet pour Express.js, le cas d'appel de l'API et l'envoi de contenu JSON est le suivant:
la source
Voici comment je l'ai. L'astuce ne s'est pas affichée sur ma console jusqu'à ce que je mette à jour npm quelques jours auparavant.
.connect a trois paramètres, l'URI, les options et err.
la source
Nous utilisions:
→ Cela donne une erreur d'analyseur d'URL
La syntaxe correcte est:
la source
Vous avez juste besoin d'ajouter
à l'intérieur de la méthode mongoose.connect.
la source
Le travail suivant pour moi pour la version 5.9.16
la source
Ces lignes ont également fait l'affaire pour tous les autres avertissements de dépréciation:
la source
J'utilisais mlab.com comme base de données MongoDB. J'ai séparé la chaîne de connexion dans un dossier différent nommé
config
et dans le fichier keys.js J'ai conservé la chaîne de connexion qui était:Et le code du serveur était
Vous devez écrire {useNewUrlParser: true} après la chaîne de connexion comme je l'ai fait ci-dessus.
Autrement dit, vous devez faire:
la source
J'utilise la version 5.x de mangouste pour mon projet. Après avoir requis le paquet mangouste, définissez la valeur globalement comme ci-dessous.
la source
Si
username
oupassword
a le@
caractère, alors utilisez-le comme ceci:la source