[node.js] useNewUrlParser를 true로 설정하여 “현재 URL 문자열 구문 분석기가 사용되지 않습니다”경고를 피하십시오

일부 MongoDB 인스턴스에 연결하는 데이터베이스 랩퍼 클래스가 있습니다.

async connect(connectionString: string): Promise<void> {
        this.client = await MongoClient.connect(connectionString)
        this.db = this.client.db()
}

이것은 나에게 경고를 주었다 :

(노드 : 4833) DeprecationWarning : 현재 URL 문자열 파서는 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 구문 분석기를 사용하려면 옵션 {useNewUrlParser : true}를 MongoClient.connect에 전달하십시오.

connect()메소드는 MongoClientOptions인스턴스를 두 번째 인수로 허용합니다 . 그러나라는 속성이 없습니다 useNewUrlParser. 또한 연결 문자열에서 해당 속성을 다음과 같이 설정하려고 시도했지만 mongodb://127.0.0.1/my-db?useNewUrlParser=true해당 경고에는 영향을 미치지 않습니다.

그렇다면 useNewUrlParser이러한 경고를 제거하도록 어떻게 설정할 수 있습니까? 스크립트가 cron으로 실행되어야하고 이러한 경고로 인해 휴지통 메일 스팸이 발생하기 때문에 이것은 중요합니다.

에 해당 패키지가 mongodb있는 버전의 드라이버를 사용 하고 있습니다. 둘 다 사용 가능한 최신 사용 가능 합니다.3.1.0-beta4@types/mongodb3.0.18npm install

해결 방법

이전 버전의 mongodb 드라이버 사용 :

"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"



답변

mongo버전을 확인하십시오 :

mongo --version

버전> = 3.1.0을 사용중인 경우 mongo연결 파일을->로 변경하십시오.

MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })

또는 몽구스 연결 파일을->

mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });

이상적으로는 버전 4 기능이지만 v3.1.0 이상에서도 지원됩니다. 자세한 내용은 MongoDB GitHub 를 확인 하십시오.


답변

언급했듯이 3.1.0-beta4드라이버 의 릴리스는 사물에 의해 조금 일찍 “와일드로 릴리스되었습니다”. 이 릴리스는 MongoDB 4.0 릴리스에서 새로운 기능을 지원하고 다른 API를 변경하기 위해 진행중인 작업의 일부입니다.

useNewUrlParser연결 URI 전달이 실제로 작동하는 방식에 대한 일부 변경으로 인해 현재 경고를 트리거하는 그러한 변경 중 하나가 옵션입니다. 나중에 더 자세히.

상황이 “고정”될 때까지 최소한 릴리스 의 부 버전에 “고정”하는 것이 좋습니다3.0.x .

  "dependencies": {
    "mongodb": "~3.0.8"
  }

그러면 3.1.x노드 모듈에 “새로”설치 하는 지점이 중지 됩니다. “베타”버전 인 “최신”릴리스를 이미 설치 한 경우 패키지 (및 package-lock.json)를 정리 하고이 3.0.x릴리스를 시리즈 릴리스 로 충돌시켜야합니다 .

실제로 “새”연결 URI 옵션을 사용하는 경우 주요 제한 사항은 실제로 port연결 문자열을 포함하는 것 입니다.

const { MongoClient } = require("mongodb");
const uri = 'mongodb://localhost:27017';  // mongodb://localhost - will fail

(async function() {
  try {

    const client = await MongoClient.connect(uri,{ useNewUrlParser: true });
    // ... anything

    client.close();
  } catch(e) {
    console.error(e)
  }

})()

이것은 새로운 코드에서 더 “엄격한”규칙입니다. 요점은 현재 코드가 본질적으로 “node-native-driver”(npm mongodb) 리포지토리 코드의 일부이며 “새 코드”는 실제로 mongodb-core“공용”노드 드라이버를 “강화” 하는 라이브러리 에서 가져옵니다 .

추가되는 “옵션”의 요점은 새로운 코드에 옵션을 추가하여 옵션을 url추가하고 더 이상 사용되지 않는 경고를 지우는 코드 에서 새로운 파서 (실제로 기반 )를 사용 하여 전환을 “쉽게” 하는 것입니다. 전달 된 연결 문자열은 실제로 새로운 파서가 기대하는 것을 준수합니다.

향후 릴리스에서는 ‘레거시’파서가 제거되고 새 파서는 옵션 없이도 사용되는 것입니다. 그러나 그때까지는 기존의 모든 코드가 기존 파싱 문자열을 테스트 할 수있는 충분한 기회가 있었을 것으로 예상됩니다.

새 드라이버 기능이 출시 될 때 사용을 시작하려면 사용 가능한 드라이버를 사용하십시오. beta 이후 릴리스 의 useNewUrlParser옵션을 활성화하여 새 구문 분석기에 유효한 연결 문자열을 제공하는 것이 이상적 입니다 MongoClient.connect().

실제로 MongoDB 4.0 릴리스의 미리보기와 관련된 기능에 액세스 할 필요가없는 경우 3.0.x이전에 언급 한대로 버전을 시리즈에 고정하십시오 . 이것은 문서화 된대로 작동하며 “고정 3.1.x“기능을 통해 실제로 안정적인 버전을 설치하려고 할 때까지 릴리스가 예상되는 종속성보다 “업데이트”되지 않도록합니다 .


답변

몽구스 연결에 대한 아래 강조 표시된 코드는 몽구스 드라이버에 대한 경고를 해결했습니다.

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


답변

변경할 것이 없습니다. 연결 기능에서만 전달{useNewUrlParser: true } .

이것은 작동합니다 :

MongoClient.connect(url, {useNewUrlParser: true}, function(err, db) {
    if(err) {
        console.log(err);
    }
    else {
        console.log('connected to ' + url);
        db.close();
    }
})


답변

{ useNewUrlParser: true }mongoose.connect () 메소드 를 추가해야합니다 .

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


답변

연결 문자열 형식은 mongodb : // user : password @ host : port / db 여야합니다 .

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

MongoClient.connect('mongodb://user:password@127.0.0.1:27017/yourDB', { useNewUrlParser: true } )


답변

아래와 같이 데이터베이스에 연결하기 전에 다음 사항을 설정하면됩니다.

const mongoose = require('mongoose');

mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);

mongoose.connect('mongodb://localhost/testaroo');

또한,

Replace update() with updateOne(), updateMany(), or replaceOne()
Replace remove() with deleteOne() or deleteMany().
Replace count() with countDocuments(), unless you want to count how many documents are in the whole collection (no filter).
In the latter case, use estimatedDocumentCount().