programing

서버 검색 및 모니터링 엔진은 더 이상 사용되지 않습니다.

sourcejob 2023. 3. 25. 11:04
반응형

서버 검색 및 모니터링 엔진은 더 이상 사용되지 않습니다.

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

콘솔에서는 다음과 같은 경고가 표시됩니다.

권장 해제 경고: 현재 서버 검색 및 모니터링 엔진은 더 이상 사용되지 않으며 이후 버전에서 제거됩니다.새 서버 검색 및 모니터링 엔진을 사용하려면 {useUnifiedTopology: true} 옵션을 MongoClient 생성자에게 전달합니다.

★★★★★★★★★★★★★★★★★?.useUnifiedTopology이제 콘솔에 표시됩니다.컨피규레이션에 추가했는데도 이 경고가 표시됩니다.왜일까요? 나나 use use use use use use use use use use i i i i i i도 쓰지 않는다.MongoClient.

편집

Felipe Flets가 Mongoose에 문제가 있다고 대답한 것처럼 그들은 이 버그를 이후 버전에서 수정했습니다.그래서 당신은 mongoose 버전을 업데이트함으로써 문제를 해결할 수 있습니다.

갱신하다

5.7된 것 Mongoose 5.7.1을 .useUnifiedTopology이치노

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

원답

저도 같은 문제에 직면해 Mongoose 코드(https://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology)를 자세히 살펴보기로 했습니다.

Mongoose 버전 5.7에 추가된 옵션으로 아직 문서화되어 있지 않습니다.도서관의 역사 https://github.com/Automattic/mongoose/blob/master/History.md에서도 찾을 수 없었습니다.

코드의 코멘트에 의하면:

  • @param {Boolean} [options.useUnifiedTopology=false] (옵션.useUnifiedTopology=false) False(거짓).「 」로 합니다.trueMongoDB 드라이버의 복제 세트 및 샤드 클러스터 모니터링 엔진을 선택합니다.

프로젝트 GitHub에서도 이 에러에 관한 문제가 있습니다.https://github.com/Automattic/mongoose/issues/8156

내 경우 복제 세트나 샤드 클러스터에서 Mongoose를 사용하지 않으며 옵션이 false여야 합니다.그러나 거짓일 경우 설정이 참이어야 한다고 불평합니다.데이터베이스가 복제 세트나 샤드 클러스터에서 실행되지 않기 때문에 실제로 작동하지 않습니다.

5.6.13으로 다운그레이드하여 프로젝트가 정상적으로 작동하고 있습니다.따라서 현재로선 다운그레이드 후 수정이 새 버전으로 업데이트될 때까지 기다리는 방법밖에 없습니다.

mongoDB에서는 현재 서버 및 엔진모니터링 패키지가 폐지되었기 때문에 새로운 서버 및 엔진모니터링 패키지를 사용해야 합니다.그래서 너는 그냥

{useUnifiedTopology: true}

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

이것으로 내 문제는 해결되었다.

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

 const client = new MongoClient(url, {useUnifiedTopology: true});
mongoose.connect('mongodb://localhost:27017/Tododb', { useNewUrlParser: true, useUnifiedTopology: true });

다음 오류를 제거합니다.

(노드:7481) 폐지 경고: 현재 URL 문자열 파서는 폐지되어 향후 버전에서 삭제될 예정입니다.새 파서를 사용하려면 {useNewUrlParser: true} 옵션을 MongoClient.connect에 전달합니다.

(노드:7481) 권장 해제 경고: 현재 서버 검출 및 모니터링 엔진은 권장되지 않으며 이후 버전에서 삭제됩니다.새 서버 검색 및 모니터링 엔진을 사용하려면 {useUnifiedTopology: true} 옵션을 MongoClient 생성자에게 전달합니다.

비동기 대기 시도 가능

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

useUnifiedTopology 옵션을 추가하고 true로 설정합니다.

mongoose.connect 옵션의 기타 3가지 구성을 설정하여 나머지 Deprecation Warning을 처리합니다.

이 설정은 나에게 유효합니다!

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

이렇게 하면 4가지 권장 해제 경고가 해결됩니다.

  1. 현재 URL 문자열 파서는 더 이상 사용되지 않으며 이후 버전에서 제거됩니다.새 파서를 사용하려면 {useNewUrlParser: true} 옵션을 MongoClient.connect에 전달합니다.
  2. 현재 서버 검색 및 모니터링 엔진은 더 이상 사용되지 않으며 이후 버전에서 제거됩니다.새 서버 검색 및 모니터링 엔진을 사용하려면 {useUnifiedTopology: true} 옵션을 MongoClient 생성자에게 전달합니다.
  3. Collection.sure인덱스는 더 이상 사용되지 않습니다.작성 사용대신 인덱스를 만듭니다.
  4. 경고: 몽구스:findOneAndUpdate() ★★★★★★★★★★★★★★★★★」findOneAndDelete()★★★★★★★★★★★★★★★★★ useFindAndModifyfalse로 설정된 옵션은 권장되지 않습니다.https://mongoosejs.com/docs/deprecations.html#-findandmodify- 를 참조해 주세요.

도움이 됐으면 좋겠다.

글쎄, 최근에 나도 같은 문제에 직면했어.막장 문서를 뒤져서 해결책을 찾았어요

접속 과 같이 하고 "Da's Mongodb"를 설정합니다.useUnifiedTopology과 같이 다음과 같이.

mongoose.connect(process.env.MONGO_URI, {
   useNewUrlParser: true,
   useCreateIndex: true,
   useFindAndModify: false
}).then(()=>{
    console.log(`connection to database established`)
}).catch(err=>{
    console.log(`db error ${err.message}`);
    process.exit(-1)
});

mongoose.set('useUnifiedTopology', true);

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」node@16.4.0 ★★★★★★★★★★★★★★★★★」mongoose@5.13.1

이 오류를 방지하려면 다음 코드를 사용하십시오.

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

어떤 이유로 인해 코드에 createConnection이 포함되어 있는 경우(내 경우 GridFsStorage를 사용하고 있습니다), 다음 사항을 코드에 추가해 보십시오.

    options: {
        useUnifiedTopology: true,
    }

파일 바로 뒤에 다음과 같이 표시됩니다.

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

만약 당신의 케이스가 내 케이스처럼 보인다면, 이것은 당신의 문제를 확실히 해결할 것입니다.안부 전해요

이건 내게 효과가 있었다.

★★★★★★★★를 사용하는 분용MongoClient이것을 시험해 보세요.

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

mongoose의 경우:

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

다른 connectionOptions를 삭제합니다.

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

이것으로 문제없이 동작합니다.

mongoose
.connect(URL_of_mongodb, {
useUnifiedTopology: true,
useNewUrlParser: true,
})
.then(() => console.log('DB Connected!'))
.catch(err => {
console.log(`DB Connection Error: ${err}`);
});

mongo 작업 샘플 코드, 참조 링크

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

Multer-gridfs-storage와 같은 확장 기능을 가진 Mongoose를 사용할 때 권장 해제 경고가 발생한 사용자.

GridFS 스토리지는 Mongoose 컨스트럭터를 호출하므로 인스턴스 작성에서 제안된 옵션을 전달하여 상속을 얻을 수 있습니다.

new GridFsStorage({ options: { useUnifiedTopology: true }});

건배!

위의 답변은 경고를 없애기 위해 무엇을 해야 하는지 아는 데 매우 유용합니다.하지만 나는 '왜'에 대한 답을 찾지 못했다.노드 서버를 사용한 MongoDB 접속경고의 답변 중 하나는 https://github.com/mongodb/node-mongodb-native/releases/tag/v3.2.1을 가리키고 있습니다.여기서 정리해보겠습니다.자세한 내용은 위의 링크를 참조하십시오.

v3.1.0 릴리스에서는 2.x 드라이버가 폐지되어 완전히 고쳐졌습니다.개서에서는 Mongos, ReplSet, Server 등의 기존 토폴로지 개념을 대체하는 새로운 개념의 토폴로지가 도입되어 유지관리성과 트레이서빌리티가 향상되었습니다.useUnifiedTopology 플래그를 전달하면 이 기능을 활성화할 수 있습니다.경고는 사용자에게 가능한 한 빨리 시험해 보도록 권장하는 것입니다.

노드로부터의 이 문제에 대해 설명하는 다른 유용한 링크JS 시점: https://mongodb.github.io/node-mongodb-native/3.3/reference/unified-topology/

mongod 명령어를 실행하여 서버를 계속 실행하는 것이 중요합니다.그렇지 않은 경우에도 이 오류는 계속 표시됩니다.

제 코드를 첨부합니다.

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

저도 같은 문제에 직면해 있었습니다.

  1. 단말기에서 다음을 실행하여 mongoDB에 접속되어 있는지 확인했습니다.

    brew services start mongodb-community@4.2
    

    그리고 결과물을 얻었습니다.

    Successfully started `mongodb-community`
    

mongodb 설치 절차
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ 또는 https://www.youtube.com/watch?v=IGIcrMTtjoU

  1. 설정은 다음과 같습니다.

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

그게 내 문제를 해결했어!

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

}});

mongoose connect useUnifiedTopology 설정: 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();

이 스레드에 다른 의존관계와도 관련이 있을 수 있도록 추가하고 싶습니다.

예를 들어, NodeJ, MongoDB, Mongoose에 대해 업데이트하거나 설정한 것은 문제가 되지 않았습니다만,connect-mongodb-session갱신되어 같은 에러가 발생하기 시작했습니다.이 경우 해결책은 단순히 롤백하는 것입니다.connect-mongodb-session 「」에서2.3.0로로 합니다.2.2.0.

여기에 이미지 설명 입력

매번 같은 에러가 발생했고, 이것은 나에게 효과가 있었다.

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

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

이 선을 사용하라, 이것은 나에게 효과가 있었다.

mongoose.set('useUnifiedTopology', true);

MongoDB 서버를 사용하는 경우 connect 시 클러스터 클럭에서 connect를 사용하여 URL을 검색한 후 URL은 다음과 같습니다.

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

이 경우 패스워드를 데이터베이스 패스워드와 DB명으로 치환한 후

const client = new MongoClient(url,{useUnifiedTopology:true});
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));
    }
});

사용한 코드를 삭제하고 다음 코드를 사용합니다.

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

Typescript를 사용한 경우 MongoOptions에 config 추가

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

이 조작은 유효합니다.

// 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));
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

위쪽 두 번째 줄을 자른 다음 해당 선을 그냥 바꿉니다.

const client = new MongoClient(url, { useUnifiedTopology: true });
const mongoose = require('mongoose');
const DB = process.env.DATABASE;
mongoose.connect(DB, {
    useNewUrlParser: true, 
    useCreateIndex: true, 
    useUnifiedTopology: true, 
    useFindAndModify: false
}).then(()=>{ 
    console.log("connection successful");
}).catch((err) =>{
    console.log("no connection");
});

「 」를 사용하고 winston 「」가 합니다.{ useUnifiedTopology: true }

예를 들어 다음과 같습니다.

winston.add(
  new winston.transports.MongoDB({
    db: 'mongodb://localhost/vidly',
    level: 'error',
    options: { useUnifiedTopology: true },
  })
);

언급URL : https://stackoverflow.com/questions/57895175/server-discovery-and-monitoring-engine-is-deprecated

반응형