web-dev-qa-db-fra.com

Comment définir useMongoClient (Mongoose 4.11.0)?

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?

47
Tiago Bértolo

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}`));
}
6
Tiago Bértolo

Voici comment vous utilisez useMongoClient : mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })

74
Xertz

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 */
});
28
jan basha
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

http://mongoosejs.com/docs/connections.html

12
Crisam De gracia

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.

http://mongoosejs.com/docs/connections.html

8
yogesh chatrola

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); 
4
krl

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

4
Abhishek Gupta

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.

https://github.com/Automattic/mongoose/issues/5399

0
Raja Parivesh
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!
});
0
Aditya Parmar

Selon mongoosedocumentation , voici comment useMongoClient peut être défini.

function connectDatabase(databaseUri){
    var promise = mongoose.connect('mongodb://localhost/myapp', {
        useMongoClient: true,
    });
    return promise;
}
0
James Choi

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.

0
Boniface Dennis