J'utilise Mongoose avec mon application Node.js et voici ma configuration:
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
}).then(()=>{
console.log(`connection to database established`)
}).catch(err=>{
console.log(`db error ${err.message}`);
process.exit(-1)
})
mais dans la console, il me donne toujours l'avertissement:
DeprecationWarning: le moteur actuel de découverte et de surveillance du serveur est obsolète et sera supprimé dans une future version. Pour utiliser le nouveau moteur de découverte et de surveillance du serveur, transmettez l'option {useUnifiedTopology: true} au constructeur MongoClient.
Quel est le problème? Je n'utilisais pas useUnifiedTopology
avant mais maintenant il apparaît dans la console. Je l'ai ajouté à la config mais ça me donne quand même cet avertissement, pourquoi? Je n'utilise même pas MongoClient
.
Comme Felipe Plets a répondu, il y avait un problème dans Mongoose et ils ont corrigé ce bogue dans les versions ultérieures. Vous pouvez donc résoudre le problème en mettant à jour la version mangouste.
Ajoutez l'option useUnifiedTopology et définissez-la sur true .
Définissez 3 autres configurations des options mongoose.connect qui traiteront les autres DeprecationWarning .
Cette configuration fonctionne pour moi!
const url = 'mongodb://localhost:27017/db_name';
mongoose.connect(
url,
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
}
)
Cela résoudra 4 DeprecationWarning .
findOneAndUpdate()
et findOneAndDelete()
sans l'option useFindAndModify
définie sur false sont obsolètes. Voir: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .J'espère que ça aide.
Définition de la connexion mangouste seUnifiedTopology: true option
import mongoose from 'mongoose';
const server = '127.0.0.1:27017'; // REPLACE WITH YOUR DB SERVER
const database = 'DBName'; // REPLACE WITH YOUR DB NAME
class Database {
constructor() {
this._connect();
}
_connect() {
mongoose.Promise = global.Promise;
// * Local DB SERVER *
mongoose
.connect(`mongodb://${server}/${database}`, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true
})
.then(
() => console.log(`mongoose version: ${mongoose.version}`),
console.log('Database connection successful'),
)
.catch(err => console.error('Database connection error', err));
}
}
module.exports = new Database();
const mongo = require('mongodb').MongoClient;
mongo.connect(process.env.DATABASE,{useUnifiedTopology: true,
useNewUrlParser: true}, (err, db) => {
if(err) {
console.log('Database error: ' + err);
} else {
console.log('Successful database connection');
auth(app, db)
routes(app, db)
app.listen(process.env.PORT || 3000, () => {
console.log("Listening on port " + process.env.PORT);
});
}});
Je veux ajouter à ce fil de discussion qu'il peut également avoir à voir avec d'autres dépendances.
Par exemple, rien de ce que j'ai mis à jour ou défini pour NodeJS, MongoDB ou Mongoose n'était le problème - cependant - connect-mongodb-session
a été mis à jour et commence à utiliser la même erreur. La solution, dans ce cas, était simplement de restaurer la version de connect-mongodb-session
à partir de la version 2.3.0
à 2.2.0
.
J'étais également confronté au même problème:
Je me suis assuré d'être connecté à mongoDB en exécutant ce qui suit sur le terminal:
brew services start [email protected]
Et j'ai obtenu la sortie:
Successfully started `mongodb-community`
Instructions pour installer mongodb sur
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ ou https://www.youtube.com/watch? v = IGIcrMTtjo
Ma configuration était la suivante:
mongoose.connect(config.mongo_uri, {
useUnifiedTopology: true,
useNewUrlParser: true})
.then(() => console.log("Connected to Database"))
.catch(err => console.error("An error has occured", err));
Ce qui a résolu mon problème!