Công cụ giám sát và khám phá máy chủ không được dùng nữa


97

Tôi đang sử dụng Mongoose với ứng dụng Node.js của mình và đây là cấu hình của tôi:

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)
})

nhưng trong bảng điều khiển, nó vẫn đưa ra cảnh báo cho tôi:

DeprecationWarning: công cụ Giám sát và Khám phá Máy chủ hiện tại không được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Để sử dụng công cụ Giám sát và Khám phá Máy chủ mới, hãy chuyển tùy chọn {useUnifiedTopology: true} cho hàm tạo MongoClient.

Vấn đề là gì? Tôi đã không sử dụng useUnifiedTopologytrước đây nhưng bây giờ nó hiển thị trong bảng điều khiển. Tôi đã thêm nó vào cấu hình nhưng nó vẫn đưa ra cảnh báo này, tại sao? Tôi thậm chí không sử dụng MongoClient.

Biên tập

Như Felipe Plets đã trả lời, có một sự cố trong Mongoose và họ đã sửa lỗi này trong các phiên bản sau. Vì vậy, bạn có thể giải quyết vấn đề bằng cách cập nhật phiên bản mongoose.

Câu trả lời:


171

Cập nhật

Mongoose 5.7.1 đã được phát hành và dường như đã khắc phục được sự cố, vì vậy việc thiết lập useUnifiedTopologytùy chọn hoạt động như mong đợi.

mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});

Câu trả lời ban đầu

Tôi cũng gặp phải vấn đề tương tự và quyết định tìm hiểu sâu về mã Mongoose: https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

Có vẻ như là một tùy chọn được thêm vào phiên bản 5.7 của Mongoose và chưa được ghi chép đầy đủ. Tôi thậm chí không thể tìm thấy nó được đề cập trong lịch sử thư viện https://github.com/Automattic/mongoose/blob/master/History.md

Theo một bình luận trong mã:

  • @param {Boolean} [options.useUnifiedTopology = false] Sai theo mặc định. Đặt thành truechọn tham gia bộ bản sao trình điều khiển MongoDB và công cụ giám sát cụm phân đoạn.

Cũng có một vấn đề trên dự án GitHub về lỗi này: https://github.com/Automattic/mongoose/issues/8156

Trong trường hợp của tôi, tôi không sử dụng Mongoose trong một tập hợp bản sao hoặc cụm phân đoạn và mặc dù tùy chọn này phải là sai. Nhưng nếu sai, nó phàn nàn rằng cài đặt phải đúng. Một khi đúng là nó vẫn không hoạt động, có thể do cơ sở dữ liệu của tôi không chạy trên một tập hợp bản sao hoặc cụm phân đoạn.

Tôi đã hạ cấp xuống 5.6.13 và dự án của tôi đã hoạt động trở lại. Vì vậy, lựa chọn duy nhất mà tôi thấy lúc này là hạ cấp nó xuống và đợi bản sửa lỗi cập nhật phiên bản mới hơn.


Tôi nghĩ như vậy (phiên bản hạ cấp), tôi đang sử dụng các cụm mlab vì vậy có thể là lý do tại sao cảnh báo không tiêu tan?
iLiA

2
có một lỗi trong mongoose mới nhất 5.7.7nếu bạn sử dụng createConnection()thay vì connect(), như mongoose.createConnection(conString, { useUnifiedTopology: true }). useUnifiedTopologysẽ không được xem xét và bạn vẫn sẽ nhận được cảnh báo. sự kiện với mongoose.set('useUnifiedTopology', true)tôi vẫn nhận được cảnh báo.
Louis Grellet

2
Cảnh báo vẫn tồn tại sau khi hạ cấp xuống 5.6.13
O'Dane Brissett

1
Tôi gặp lỗi đó khi sử dụng trình điều khiển MongoDB gốc!
Akhila

Tại đây, chúng tôi có tất cả các tùy chọn không được dùng nữa: mongoosejs.com/docs/deprecations.html
Murtaza Ahmad

27

Trong mongoDB, họ không dùng gói giám sát động cơ và máy chủ hiện tại, vì vậy bạn cần sử dụng gói giám sát động cơ và máy chủ mới. Vì vậy, bạn chỉ cần sử dụng

{useUnifiedTopology: true}

mongoose.connect("paste db link", {useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true });

12
nếu bạn đọc câu hỏi của tôi, tôi đã đề cập ở đó rằng tôi đã thêm useUnifiedTopology: truevào cấu hình của mình và nó vẫn hiển thị cảnh báo cho tôi
iLiA 12/09/19

4
Tôi đã gặp sự cố này và tôi cũng đã thêm useUnifiedTopology: truenhưng vẫn có thông báo tương tự trên bảng điều khiển.
RSA

6
Đối với bất kỳ ai vẫn nhận được tin nhắn, hãy thử gọi mongoose.set('useUnifiedTopology', true)trước mongoose.connect.
dev4life 23/09/19

Vâng, đây là câu trả lời đúng. Bạn chỉ cần đặt "useUnifiedTopology: true, useNewUrlParser: true" bên trong một cặp {}. Mặc dù tôi đã không sử dụng "useCreateIndex: true", nhưng nó cho tôi một số ý tưởng. Cách của dev4life cũng hoạt động.
William Hou

mongoose .connect ("db conn url", {useUnifiedTopology: true, useNewUrlParser: true,}) .then (() => console.log ('MongoDB Connected!')) .catch (err => {err => console .log (err)}) đây là những gì đã làm việc cho tôi
Sanket Sonavane

9

Điều này đã giải quyết vấn đề của tôi.

 const url = 'mongodb://localhost:27017';

 const client = new MongoClient(url, {useUnifiedTopology: true});

cảm ơn vì câu trả lời, nhưng đây là câu hỏi mongoose và tôi không sử dụng mongoclient
iLiA

3
@iLiA Bạn được chào đón. Vâng tôi biết. Nhưng câu trả lời này có thể giúp ích cho ai đó, vì tôi tìm thấy câu hỏi của bạn chính xác theo chủ đề tiêu đề chứ không phải theo nội dung (và nội dung câu hỏi của bạn rất gần với thông tin chung về MongoClient)
Юрий Светлов

3

Bạn có thể thử async đang chờ đợi

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);
    }
};


Sử dụng {useUnifiedTopology: true}
Niran Yousuf

3

Sử dụng mã sau để tránh lỗi đó

MongoClient.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true});

2
mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });

Sẽ loại bỏ các lỗi sau: -

(node: 7481) DeprecationWarning: trình phân tích cú pháp chuỗi URL hiện tại không được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Để sử dụng trình phân tích cú pháp mới, hãy chuyển tùy chọn {useNewUrlParser: true} tới MongoClient.connect.

(node: 7481) DeprecationCảnh báo: công cụ Giám sát và Khám phá Máy chủ hiện tại không được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Để sử dụng công cụ Giám sát và Khám phá Máy chủ mới, hãy chuyển tùy chọn {useUnifiedTopology: true} cho hàm tạo MongoClient.


3
Ngoài ra, hãy đảm bảo thêm useUnifiedTopology: truevào tất cả các phụ thuộc sử dụng mongoDB, trong trường hợp của tôi, tôi đang sử dụng, wiston-mongodbtôi cũng phải thêm nó vào tùy chọn winston.add(new winston.transports.MongoDB({ db: config.get('db'), options: { useUnifiedTopology: true } }));
Gael Musikingala

@GaelMusikingala đây là vấn đề của tôi. Cảm ơn bạn đã chỉ ra điều đó
akmalhakimi1991

@GaelMusikingala, Cảm ơn vì đã cứu mạng tôi. ❤️ 👏
Mr.spShuvo

@ Mr.spShuvo vui lòng ủng hộ
Hassan Ali Shahzad

2

Thêm tùy chọn useUnifiedTopology và đặt nó thành true .

Đặt 3 cấu hình khác của tùy chọn mongoose.connect sẽ xử lý các tùy chọn DeprecationWarning khác còn lại .

Cấu hình này phù hợp với tôi!

const url = 'mongodb://localhost:27017/db_name';
mongoose.connect(
    url, 
    { 
        useNewUrlParser: true, 
        useUnifiedTopology: true,
        useCreateIndex: true,
        useFindAndModify: false
    }
)

Điều này sẽ giải quyết 4 DeprecationWarning .

  1. Trình phân tích chuỗi URL hiện tại không được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Để sử dụng trình phân tích cú pháp mới, hãy chuyển tùy chọn {useNewUrlParser: true} tới MongoClient.connect.
  2. Công cụ Giám sát và Khám phá Máy chủ hiện tại không được dùng nữa và sẽ bị xóa trong phiên bản tương lai. Để sử dụng công cụ Giám sát và Khám phá Máy chủ mới, hãy chuyển tùy chọn {useUnifiedTopology: true} cho hàm tạo MongoClient.
  3. Collection.ensureIndex không được dùng nữa. Sử dụng createIndexes để thay thế.
  4. DeprecationWarning: Mongoose: findOneAndUpdate()findOneAndDelete()không có useFindAndModifytùy chọn được đặt thành false không được chấp nhận. Xem: https://mongoosejs.com/docs/deprecations.html#-findandmodify- .

Hy vọng nó giúp.


1
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);
});

1

Nếu mã của bạn bao gồm createConnetion vì một số lý do (Trong trường hợp của tôi, tôi đang sử dụng GridFsStorage), hãy thử thêm phần sau vào mã của bạn:

    options: {
        useUnifiedTopology: true,
    }

chỉ sau tệp, như thế này:

    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,
    }
})

Nếu trường hợp của bạn giống trường hợp của tôi, điều này chắc chắn sẽ giải quyết được vấn đề của bạn. Trân trọng


0

Tôi cũng gặp phải vấn đề tương tự:

  1. Tôi đảm bảo được kết nối với mongoDB bằng cách chạy phần sau trên thiết bị đầu cuối:

    brew services start mongodb-community@4.2
    

    Và tôi nhận được đầu ra:

    Successfully started `mongodb-community`
    

Hướng dẫn cài đặt mongodb tại
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ hoặc https://www.youtube.com/watch?v=IGIcrMTtjoU

  1. Cấu hình của tôi như sau:

    mongoose.connect(config.mongo_uri, {
        useUnifiedTopology: true,
        useNewUrlParser: true})
        .then(() => console.log("Connected to Database"))
        .catch(err => console.error("An error has occured", err));
    

Mà đã giải quyết được vấn đề của tôi!


0
   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);
    });  

}});


0

Đặt mongoose kết nối sử dụngUnifiedTopology: 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();

0

Tôi muốn thêm vào chủ đề này rằng nó cũng có thể phải làm với các phụ thuộc khác.

Ví dụ: không có gì tôi cập nhật hoặc thiết lập cho NodeJS, MongoDB hoặc Mongoose là vấn đề - tuy nhiên - connect-mongodb-sessionđã được cập nhật và bắt đầu gặp lỗi tương tự. Giải pháp, trong trường hợp này, là chỉ cần khôi phục phiên bản connect-mongodb-sessiontừ phiên bản 2.3.0sang 2.2.0.

nhập mô tả hình ảnh ở đây


0

tôi có cùng một lỗi xuất hiện mỗi lần và điều này hiệu quả với tôi

mongoose.connect("mongodb://localhost:27017/${yourDB}", {
    useNewUrlParser: true,
    useUnifiedTopology: true

}, function (err) {
    if (err) {
        console.log(err)
    } else {
        console.log("Database connection successful")
    }
});

0

sử dụng dòng này, điều này đã làm việc cho tôi

mongoose.set('useUnifiedTopology', true);

1
Khi có thể, hãy cố gắng cung cấp giải thích bổ sung thay vì chỉ mã. Những câu trả lời như vậy có xu hướng hữu ích hơn vì chúng giúp các thành viên của cộng đồng và đặc biệt là các nhà phát triển mới hiểu rõ hơn lý do của giải pháp và có thể giúp ngăn chặn nhu cầu giải quyết các câu hỏi tiếp theo.
Rajan

0

Nếu bạn đang sử dụng máy chủ MongoDB thì sau khi sử dụng kết nối trong đồng hồ cụm khi kết nối và tìm URL, URL sẽ giống như thế này

<mongodb+srv://Rohan:<password>@cluster0-3kcv6.mongodb.net/<dbname>?retryWrites=true&w=majority>

Trong trường hợp này, đừng quên thay thế mật khẩu bằng mật khẩu cơ sở dữ liệu và tên db của bạn rồi sử dụng

const client = new MongoClient(url,{useUnifiedTopology:true});

0
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));
    }
});

Khi có thể, hãy cố gắng cung cấp giải thích bổ sung thay vì chỉ mã. Những câu trả lời như vậy có xu hướng hữu ích hơn vì chúng giúp các thành viên của cộng đồng và đặc biệt là các nhà phát triển mới hiểu rõ hơn lý do của giải pháp và có thể giúp ngăn chặn nhu cầu giải quyết các câu hỏi tiếp theo.
Rajan

0

Rất đơn giản, hãy xóa mã mà bạn đã sử dụng và sử dụng mã dưới đây:

const url = 'mongodb://localhost:27017';
var dbConn = mongodb.MongoClient.connect(url, {useUnifiedTopology: true});

0

nếu bạn đã sử dụng tập lệnh, hãy thêm cấu hình vào 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,
};

0

Điều quan trọng là phải chạy lệnh mongod của bạn và giữ cho máy chủ hoạt động. Nếu không, bạn sẽ vẫn thấy lỗi này.

Tôi đính kèm cho bạn mã của tôi:

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient

const connectionURL = 'mongodb://127.0.0.1:27017'
const databaseName = 'task-manager'

MongoClient.connect(connectionURL, {useNewUrlParser: true, useUnifiedTopology: true}, (error, client) => {
    if(error) {
        return console.log('Error connecting to the server.')
    }

    console.log('Succesfully connected.')
})


0

Điều này sẽ hoạt động:

// 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));

-1

Điều này đã làm việc cho tôi

Đối với những người sử dụng MongoClienthãy thử cái này:

MongoClient.connect(connectionurl, 
  {useUnifiedTopology: true, useNewUrlParser: true},  callback() {

Đối với cầy mangut:

mongoose.connect(connectionurl, 
         {useUnifiedTopology: true, useNewUrlParser: true}).then(()=>{

Xóa kết nối khác


1
Tôi thừa nhận rằng tôi không sử dụng mongoClient
Ilia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.