C'est le code que j'utilise pour me connecter à ma base de données:
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug('Connected to MongoDB at %O', databaseUri);
return Mongoose.connection;
});
}
Aujourd'hui, j'ai mis à jour Mongoose vers la version 4.11.0 et j'ai reçu cet avertissement lors de l'exécution de mes tests:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
Je ne trouve aucune information sur la manière de "définir useMongoClient".
Savez-vous comment?
Sans TypeScript vous pouvez pratiquement ignorer le problème et utiliser Mongoose.connect(databaseUri, { useMongoClient: true })
.
Si vous voulez vraiment éviter d'avoir cet avertissement, évitez la version 4.11.0.
J'ai mis à jour la version 4.11.1 et comme @ types/mongoose @ 4.7.18 ne sont pas encore mis à jour et qu'ils ne mentionnent pas le champ useMongoClient
dans la ConnectionOptions
, voici comment j'ai importé le module:
const Mongoose = require('mongoose');
Et puis utilisé cette fonction:
private connectDatabase(databaseUri: string): Promise<any> {
return Mongoose.connect(databaseUri, { useMongoClient: true })
.then(() => {
console.log('Connected to MongoDB at ', databaseUri);
return Mongoose.connection;
})
.catch(err => debug(`Database connection error: ${err.message}`));
}
Voici comment vous utilisez useMongoClient : mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
Ajoutez {useMongoClient: true} comme autre argument à connecter ou à la méthode createConnection, cela dépend de la version de mongoose que vous utilisez.
// Using `mongoose.connect`...
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
// Or `createConnection`
var promise = mongoose.createConnection('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
quelqu'un at-il essayé cela? mon avertissement obsolète a disparu quand j'utilise ceci, il était dans la documentation
La solution la plus simple consiste à ouvrir votre terminal, à changer votre répertoire en votre projet racine (dossier dans lequel package.json
est).
Courir:npm remove mongoose
puis:
npm install [email protected] --save
problème résolu.
La mise à niveau n'est pas toujours la meilleure option.
Connectez-vous à MongoDB avec Mongoose 4.11.x (testé avec à la fois une instance unique de mLab et le jeu de répliques Atlas de MongoDB):
const mongoose = require ('mongoose'); mongoose.Promise = global.Promise; const options = { promiseLibrary: global.Promise, useMongoClient: true, }; function connect () { mongoose.connect (URI, options) .then (function () { const admin = new mongoose.mongo.Admin (mongoose.connection.db); admin.buildInfo (function (err, info) { if (err) { console.err (`Erreur lors de l’obtention des informations MongoDB: $ {err}`); } else { console.log (`Connexion à MongoDB (version $ {info.version}) ouverte avec succès!`) ; } }); }) .catch ((err) => console.error (`Erreur lors de la connexion à MongoDB: $ {err}`)); ;__.} module.exports = connect;
Créer un modèle:
const mongoose = require ('mongoose'); const userSchema = new mongoose.Schema ({...}); module.exports = mongoose.model ('User ', userSchema);
Comme le disent beaucoup de réponses, l'ajout de { useMongoClient: true }
dans l'argument d'options à la méthode connect
ou createConnection
résoudra le problème.
Par exemple
// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });
// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });
Mais qu'est-ce que MongoClinet en premier lieu?
À partir de la version 1.2 du pilote MongoDB Node.js, une nouvelle classe de connexion, MongoClient, a été introduite et porte le même nom pour tous les pilotes officiels.
La nouvelle classe de connexion MongoClient accuse réception de toutes les écritures sur MongoDB, contrairement à la classe de connexion existante Db dont les accusés de réception sont désactivés.
Donc, { useMongoClient: true }
indique à Moongoose d'utiliser la nouvelle classe de connexion plutôt que l'ancienne
Pour plus d'informations cliquez ici
Le correctif le plus simple pour cela:
Exécutez cette commande dans le dossier racine du projet via un terminal:
npm remove mongoose
npm install [email protected] --save
Problème résolu.
La mise à niveau n'est pas toujours la meilleure option.
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/starbucks', {
useMongoClient: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('openUri', function() {
// we're connected!
});
Selon mongoose
documentation , voici comment useMongoClient
peut être défini.
function connectDatabase(databaseUri){
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
});
return promise;
}
Erreur:
(node: 1652) DeprecationWarning: open()
est obsolète dans mongoose> = 4.11.0, utilisez plutôt openUri()
ou définissez l'option useMongoClient
si vous utilisez connect()
ou createConnection()
.
Solution: Pour définir useMongoClient: true dans la propriété de connexion
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
Voir http://mongoosejs.com/docs/connections.html#use-mongo-client Écoute actuellement la demande.