Механизм обнаружения и мониторинга сервера устарел
я использую mongoose с моим приложением node.js, и это моя конфигурация
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)
})
но в консоли все равно выдает предупреждение
DeprecationWarning: текущий механизм обнаружения и мониторинга сервера устарел и будет удален в следующей версии. Чтобы использовать новый механизм обнаружения и мониторинга сервера, передайте опцию {useUnifiedTopology: true} конструктору MongoClient.
что проблема? я не использовал useUnifiedTopology раньше, но теперь он появился в консоли, и я добавил его, но он все еще дает мне эту ошибку. Почему? Я даже не использую mongoClient.
Ответы
Ответ 1
Обновление
Mongoose 5.7.1 был выпущен и, похоже, решил проблему, поэтому настройка опции useUnifiedTopology
работает, как и ожидалось.
mongoose.connect(mongoConnectionString, {useUnifiedTopology: true});
Оригинальный ответ
Я столкнулся с той же проблемой и решил углубиться в код Mongoose: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology
Кажется, это вариант, добавленный в версии 5.7 Mongoose, и пока еще недостаточно документированный. Я не мог даже найти это упомянутое в истории библиотеки https://github.com/Automattic/mongoose/blob/master/History.md
Согласно комментарию в коде:
-
@param {Boolean} [options.useUnifiedTopology = false] Ложь по умолчанию. Установите
true
, чтобы включить набор реплик драйверов MongoDB и механизм мониторинга кластерных сегментов.
Существует также проблема в проекте GitHub по поводу этой ошибки: https://github.com/Automattic/mongoose/issues/8156
В моем случае я не использую Mongoose в наборе реплик или в сегментированном кластере, хотя опция должна быть ложной. Но если ложь, она жалуется, что настройка должна быть истинной. Если это правда, это все еще не работает, вероятно, потому что моя база данных не работает в наборе реплик или в изолированном кластере.
Я опустился до 5.6.13 и мой проект снова работает нормально. Поэтому единственная возможность, которую я вижу на данный момент, - это понизить ее и дождаться обновления исправления для более новой версии.
Ответ 2
В mongoDB они устарели для текущего пакета мониторинга серверов и движков, поэтому вам нужно использовать новый пакет мониторинга серверов и движков. Так что вы просто используете
{ useUnifiedTopology:true }
mongoose.connect(process.env.test_db, {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });
Ответ 3
Вы можете попробовать асинхронное ожидание
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);
}
};
Ответ 4
Я также столкнулся с той же проблемой:
Я подключился к mongoDB, запустив на терминале следующее:
brew services start [email protected]
И я получил вывод:
Successfully started 'mongodb-community'
Инструкции по установке mongodb на
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/
или https://www.youtube.com/watch?v=IGIcrMTtjoU
Моя конфигурация была следующей:
mongoose.connect(config.mongo_uri, {
useUnifiedTopology: true,
useNewUrlParser: true})
.then(() => console.log("Connected to Database"))
.catch(err => console.error("An error has occured", err));
Который решил мою проблему!
Ответ 5
Это сработало для меня
MongoClient.connect(connectionurl,
{useUnifiedTopology: true, useNewUrlParser: true}, callback() {
mongoose.connect(connectionurl,
{useUnifiedTopology: true, useNewUrlParser: true}).then(()=>{
Удалить другие параметры подключения