Używam Mongoose z moją aplikacją Node.js i to jest moja konfiguracja:
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)
})
ale w konsoli nadal daje mi ostrzeżenie:
Przestarzałe Ostrzeżenie: obecny mechanizm wykrywania i monitorowania serwera jest przestarzały i zostanie usunięty w przyszłej wersji. Aby użyć nowego mechanizmu wykrywania i monitorowania serwera, przekaż opcję {useUnifiedTopology: true} do konstruktora MongoClient.
Jaki jest problem? Nie używałem useUnifiedTopology
wcześniej, ale teraz pojawia się w konsoli. Dodałem go do konfiguracji, ale nadal daje mi to ostrzeżenie, dlaczego? Nawet nie używam MongoClient
.
Edytować
Jak odpowiedział Felipe Plets, wystąpił problem w Mongoose i naprawiono ten błąd w późniejszych wersjach. Możesz więc rozwiązać problem, aktualizując wersję Mongoose.
5.7.7
jeśli używaszcreateConnection()
zamiastconnect()
, jakmongoose.createConnection(conString, { useUnifiedTopology: true })
.useUnifiedTopology
nie będą brane pod uwagę i nadal otrzymasz ostrzeżenie. Wydarzenie, w którymmongoose.set('useUnifiedTopology', true)
nadal otrzymuję ostrzeżenie.W mongoDB zrezygnowali z obecnego pakietu monitorowania serwera i silnika, więc musisz użyć nowego pakietu monitorowania serwera i silnika. Więc po prostu użyj
mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
źródło
useUnifiedTopology: true
w mojej konfiguracji i nadal pokazuje mi ostrzeżenieuseUnifiedTopology: true
ale nadal ta sama wiadomość pojawia się na konsoli.mongoose.set('useUnifiedTopology', true)
przed mongoose.connect.To rozwiązało mój problem.
const url = 'mongodb://localhost:27017'; const client = new MongoClient(url, {useUnifiedTopology: true});
źródło
Możesz spróbować oczekiwać async
const connectDB = async () => { try { await mongoose.connect(<database url>, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true, useFindAndModify: false }); console.log("MongoDB Conected") } catch (err) { console.error(err.message); process.exit(1); } };
źródło
Dodaj opcję useUnifiedTopology i ustaw ją na wartość true .
Ustaw inne 3 konfiguracje opcji mongoose.connect, które zajmą się innymi pozostałymi opcjami DeprecationWarning .
Ta konfiguracja działa dla mnie!
const url = 'mongodb://localhost:27017/db_name'; mongoose.connect( url, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false } )
Spowoduje to rozwiązanie problemu 4 DeprecationWarning .
findOneAndUpdate()
ifindOneAndDelete()
bezuseFindAndModify
opcji ustawionej na false są przestarzałe. Zobacz: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .Mam nadzieję, że to pomoże.
źródło
Użyj poniższego kodu, aby uniknąć tego błędu
MongoClient.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true});
źródło
mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });
Usunie następujące błędy: -
(node: 7481) DeprecationWarning: bieżący parser ciągu URL jest przestarzały i zostanie usunięty w przyszłej wersji. Aby użyć nowego parsera, przekaż opcję {useNewUrlParser: true} do MongoClient.connect.
(węzeł: 7481) Przestarzałe Ostrzeżenie: obecny mechanizm wykrywania i monitorowania serwera jest przestarzały i zostanie usunięty w przyszłej wersji. Aby użyć nowego mechanizmu wykrywania i monitorowania serwera, przekaż opcję {useUnifiedTopology: true} do konstruktora MongoClient.
źródło
useUnifiedTopology: true
do wszystkich zależności korzystających z mongoDB, w moim przypadkuwiston-mongodb
musiałem to również dodać w opcjiwinston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
const mongoose = require("mongoose"); mongoose.connect('mongodb://localhost:27017/Edureka',{ useNewUrlParser: true, useUnifiedTopology: true }, (error)=> { const connectionStatus = !error ? 'Success': 'Error Connecting to database'; console.log(connectionStatus); });
źródło
Jeśli z jakiegoś powodu twój kod zawiera createConnetion (w moim przypadku używam GridFsStorage), spróbuj dodać do swojego kodu:
options: { useUnifiedTopology: true, }
zaraz po pliku, na przykład:
const storage = new GridFsStorage({ url: mongodbUrl, file: (req, file) => { return new Promise((resolve, reject) => { crypto.randomBytes(16, (err, buf) => { if (err) { return reject(err); } const filename = buf.toString('hex') + path.extname(file.originalname); const fileInfo = { filename: filename, bucketName: 'uploads' }; resolve(fileInfo); }); }); }, options: { useUnifiedTopology: true, } })
Jeśli Twoja sprawa wygląda jak moja, to z pewnością rozwiąże Twój problem. pozdrowienia
źródło
Miałem również do czynienia z tym samym problemem:
Upewniłem się, że jestem podłączony do mongoDB, uruchamiając na terminalu następujące polecenie:
brew services start mongodb-community@4.2
I otrzymałem wyjście:
Successfully started `mongodb-community`
Instrukcja instalacji mongodb na
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ lub https://www.youtube.com/watch?v=IGIcrMTtjoU
Moja konfiguracja wyglądała następująco:
mongoose.connect(config.mongo_uri, { useUnifiedTopology: true, useNewUrlParser: true}) .then(() => console.log("Connected to Database")) .catch(err => console.error("An error has occured", err));
Co rozwiązało mój problem!
źródło
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); });
}});
źródło
Ustawienie połączenia mongoose useUnifiedTopology: opcja true
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();
źródło
To zadziałało dla mnie
Dla osób używających
MongoClient
spróbuj tego:MongoClient.connect(connectionurl, {useUnifiedTopology: true, useNewUrlParser: true}, callback() {
W przypadku mangusty:
mongoose.connect(connectionurl, {useUnifiedTopology: true, useNewUrlParser: true}).then(()=>{
Usuń inne opcje połączenia
źródło
Chcę dodać do tego wątku, że może to mieć również związek z innymi zależnościami.
Na przykład nic, co zaktualizowałem lub ustawiłem dla NodeJS, MongoDB lub Mongoose, nie było problemem - jednak -
connect-mongodb-session
nie zostało zaktualizowane i nie zaczęło wyświetlać tego samego błędu. Rozwiązaniem w tym przypadku było po prostu przywrócenie wersjiconnect-mongodb-session
from version2.3.0
do2.2.0
.źródło
Za każdym razem pojawiały się te same błędy i to zadziałało
mongoose.connect("mongodb://localhost:27017/${yourDB}", { useNewUrlParser: true, useUnifiedTopology: true }, function (err) { if (err) { console.log(err) } else { console.log("Database connection successful") } });
źródło
użyj tej linii, to zadziałało dla mnie
mongoose.set('useUnifiedTopology', true);
źródło
Jeśli korzystasz z serwera MongoDB, to po użyciu connect w zegarze klastra podczas łączenia i znalezieniu adresu URL, adres URL będzie podobny do tego
<mongodb+srv://Rohan:<password>@cluster0-3kcv6.mongodb.net/<dbname>?retryWrites=true&w=majority>
W takim przypadku nie zapomnij zastąpić hasła hasłem bazy danych i nazwą bazy danych, a następnie użyj
const client = new MongoClient(url,{useUnifiedTopology:true});
źródło
mongoose.connect("DBURL", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true },(err)=>{ if(!err){ console.log('MongoDB connection sucess'); } else{ console.log('connection not established :' + JSON.stringify(err,undefined,2)); } });
źródło
To proste, usuń kod, którego użyłeś i użyj poniższego kodu:
const url = 'mongodb://localhost:27017'; var dbConn = mongodb.MongoClient.connect(url, {useUnifiedTopology: true});
źródło
jeśli użyłeś skryptu, dodaj konfigurację do MongoOptions
const MongoOptions: MongoClientOptions = { useNewUrlParser: true, useUnifiedTopology: true, }; const client = await MongoClient.connect(url, MongoOptions); if you not used typescript const MongoOptions= { useNewUrlParser: true, useUnifiedTopology: true, };
źródło
Ważne jest, aby uruchomić polecenie mongod i utrzymać działanie serwera. Jeśli nie, nadal będziesz widzieć ten błąd.
Załączam mój kod:
źródło
To zadziała:
// Connect to Mongo mongoose.set("useNewUrlParser", true); mongoose.set("useUnifiedTopology", true); mongoose .connect(db) // Connection String here .then(() => console.log("MongoDB Connected...")) .catch(() => console.log(err));
źródło
const url = 'mongodb://localhost:27017'; const client = new MongoClient(url);
Wytnij górną drugą linię, a następnie po prostu zastąp tę linię
const client = new MongoClient(url, { useUnifiedTopology: true });
źródło
To działa dobrze dla mnie i nie ma więcej błędów.
mongoose .connect(URL_of_mongodb, { useUnifiedTopology: true, useNewUrlParser: true, }) .then(() => console.log('DB Connected!')) .catch(err => { console.log(`DB Connection Error: ${err}`); });
źródło
var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/"; MongoClient.connect(url,{ useUnifiedTopology: true }, function(err, db) { if (err) throw err; var dbo = db.db("mydb"); dbo.createCollection("customers", function(err, res) { if (err) throw err; console.log("Collection created!"); db.close(); }); });
źródło