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


239

일부 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"

5
그것은 beta주말에 npm에 출시 된 버전 에서 나왔습니다 . API가 실제로 완성 될 때까지 걱정하지 마십시오. 안정적인 버전을 설치하는 것이 옳았습니다.
닐 룬

1
(: {사실 useNewUrlParser} ": // localhost를 PORTNUMBER / YourDB MongoDB를") MongoDB를 추가 기능의 3.0.0 단순히 mongoose.connect 위
Majedur Rahaman

답변:


402

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 를 확인 하십시오.


1
@AbhishekSinha 왜 몽고가> = 4.0.0입니까? 3.6.5를 사용하고 있으며 성가신 메시지도 사라졌습니다.
greuze

그렇습니다. 기본적으로 v4 기능이지만 v3.1.0 이상은 새로운 기능도 지원합니다.
Abhishek Sinha

3
이것은 콜백, 오류 등의 오류가있는 경우 추가하고 싶은 것이 가장 좋습니다. mongoose.connect (dbUrl, {useNewUrlParser : true}, function (err) {console.log ( "mongoDB connected", err);})
ptts

고마워, 프로처럼 수정
Hidayt Rahman

46

언급했듯이 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"기능을 통해 실제로 안정적인 버전을 설치하려고 할 때까지 릴리스가 예상되는 종속성보다 "업데이트"되지 않도록합니다 .


1
"야생으로 풀려났다"고 할 때의 의미에 대한 자세한 정보가 있습니까? 3.1.0-beta4는 어떻게 동물원에서 탈출 했습니까? 그것에 대해 어떤 언급을 하시겠습니까?
Wyck

2
은 "참조"@Wyck 시간에 질문하고, 질문을 받았다 것을 물론이었다 npm install mongodb결과 "베타" 그것으로 표시된 이후 설치되는 (명확하게 질문에 표시된 버전 문자열에 표시) stable때를 NPM 저장소 해서는 안됩니다. 이것은 실제로 오류 였으며 버전 문자열 내에 표시 alpha되거나 beta버전 문자열 내에 코드 릴리스 가 비슷하게 안정적인 것으로 표시되는 경우 항상 고려해야 합니다. 당연히 시간이 지났으며, 이것은 안정된 릴리스의 기능으로, (지시 된 바와 같이) 결국 사라질 때까지 계속됩니다.
Neil Lunn

45

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

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

4
나를 위해 작동하지 않습니다. 계속 사용 중 : (node ​​: 35556) DeprecationWarning : 현재 URL 문자열 구문 분석기가 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 새 구문 분석기를 사용하려면 옵션 {useNewUrlParser : true}를 MongoClient.connect에 전달하십시오.
Alex

당신은 당신이 경우 여전히 DB 경로를 제공 삭제하고 package.json 파일이있을 때마다 설치 NPM 입력하여 node_modules을 다시 설치 시도를 작동하지 않는 곳 server.js 또는 app.js 저장해야합니다
나렌드라 마루

24

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

이것은 작동합니다 :

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

내가 필요한 것, 그러나 경고 메시지는 여전히 있습니다 : -S
alex351

더 이상 경고가 없습니다.
Q. Qiao

17

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

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

1
이 답변은 몇 달 전에 게시 된 다른 답변과 같습니다
Daniel W.

이것은 이전 답변과 어떻게 다릅니 까?
Peter Mortensen

@PeterMortensen 먼저 답변을 게시 한 날짜를 확인하십시오
KARTHIKEYAN.A

15

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

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

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

아니요. MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )작동합니다.
Nino Filiu

이것은 이전 답변과 어떻게 다릅니 까?
Peter Mortensen

15

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

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().

3
최고의 답변이어야합니다. 나를위한 다른 모든 대답은 비참하게 실패했습니다.
Anthony

Pls는 correct마치 당신을 위해 일한 것처럼 ans를 표시하십시오 . 그것은 나를 위해 일했다!
Arpan Banerjee

9

다음은 나를 위해 작동합니다.

const mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/playground", { useNewUrlParser: true,useUnifiedTopology: true })
.then(res => console.log('Connected to db'));

mongoose버전입니다 5.8.10.


1
이것도 나를 위해 일했습니다. 나는 using--하고body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
Arpan 얀 배너 지

8

나는 당신이 추가 할 필요가 없다고 생각합니다 { useNewUrlParser: true }.

새로운 URL 파서를 이미 사용하고 싶다면 전적으로 귀하에게 달려 있습니다. 결국 MongoDB가 새로운 URL 파서로 전환하면 경고가 사라집니다.

연결 문자열 URI 형식에 지정된대로 포트 번호를 설정할 필요가 없습니다.

추가 { useNewUrlParser: true }만으로 충분합니다.


1
포트 번호를 추가 했는데도 여전히 오류 메시지가 나타납니다. 오류 메시지가 매우 혼란스럽고 오해의 소지가 있습니다. 사실 이전 형식을 사용하고 있고 완벽하게 작동하는 경우 새 형식을 사용하라는 메시지가 나타나는 이유는 무엇입니까?
Nico

2
좋은 질문! 경고입니다. 오류가 아닙니다. 추가 useNewUrlParser: true하면 경고가 사라집니다. 그러나 mongo가 새로운 URL 파서로 전환하면이 추가 매개 변수가 더 이상 사용되지 않으므로 약간 어리 석습니다.
Sam

포트 번호가 새로운 URL 파서가 기대하는 것임을 어떻게 알았습니까? 새로운 URL 파서가 무엇인지 실제로 설명하는 것을 찾을 수 없습니다
Brad

@ 브래드. 포트 번호를 추가해야한다고 가정했지만 Mongo 사양에는 여전히 포트 번호가 옵션으로 언급되어 있습니다. 이에 따라 답변을 업데이트했습니다.
Sam

8

ECMAScript 8 용으로 업데이트 / 대기

잘못된 ECMAScript 8 데모 코드 MongoDB inc 도이 경고를 생성합니다.

MongoDB는 다음과 같은 조언을 제공합니다.

새 구문 분석기를 사용하려면 옵션 {useNewUrlParser : true}를 MongoClient.connect에 전달하십시오.

이렇게하면 다음 오류가 발생합니다.

TypeError : 최종 인수 executeOperation는 콜백이어야합니다

대신 에 옵션을 제공해야합니다new MongoClient .

아래 코드를 참조하십시오 :

const DATABASE_NAME = 'mydatabase',
    URL = `mongodb://localhost:27017/${DATABASE_NAME}`

module.exports = async function() {
    const client = new MongoClient(URL, {useNewUrlParser: true})
    var db = null
    try {
        // Note this breaks.
        // await client.connect({useNewUrlParser: true})
        await client.connect()
        db = client.db(DATABASE_NAME)
    } catch (err) {
        console.log(err.stack)
    }

    return db
}

7

포트 번호를 제공하고이 구문 분석기를 사용하여 문제점을 해결할 수 있습니다. {useNewUrlParser: true}

해결책은 다음과 같습니다.

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

내 문제를 해결합니다.


3
콘솔 자체는 추가 솔루션을 준 useNewUrlParser property에서 connect, 그러나 당신의 솔루션을 도왔다. 너무 공감!
ganeshdeshmukh

7

Express.js, API 호출 사례 및 JSON 컨텐츠 전송에 대한 전체 예제는 다음과 같습니다.

...
app.get('/api/myApi', (req, res) => {
  MongoClient.connect('mongodb://user:password@domain.com:port/dbname',
    { useNewUrlParser: true }, (err, db) => {

      if (err) throw err
      const dbo = db.db('dbname')
      dbo.collection('myCollection')
        .find({}, { _id: 0 })
        .sort({ _id: -1 })
        .toArray(
          (errFind, result) => {
            if (errFind) throw errFind
            const resultJson = JSON.stringify(result)
            console.log('find:', resultJson)
            res.send(resultJson)
            db.close()
          },
        )
    })
}

4

내가 가진 방법은 다음과 같습니다. 이틀 전에 npm을 업데이트 할 때까지 힌트가 콘솔에 표시되지 않았습니다.

.connect에는 URI, 옵션 및 err의 세 가지 매개 변수가 있습니다.

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) 
            throw err;
        console.log(`Successfully connected to database.`);
    }
);

4

우리는 사용하고 있었다 :

mongoose.connect("mongodb://localhost/mean-course").then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Connection to database failed.");
});

→ URL 파서 오류가 발생합니다

올바른 구문은 다음과 같습니다.

mongoose.connect("mongodb://localhost:27017/mean-course" , { useNewUrlParser: true }).then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Connection to database failed.");
});

1
설명 추가
Mathews Sunny

4

당신은 추가해야합니다

{ useNewUrlParser: true }

mongoose.connect 메소드 내부.


1
이것은 이전 답변과 어떻게 다릅니 까?
피터 모텐슨

해시를 확인하십시오.
AGrush

2

버전 5.9.16에 대한 다음 작업

const mongoose = require('mongoose');

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

mongoose.connect('mongodb://localhost:27017/dbName')
    .then(() => console.log('Connect to MongoDB..'))
    .catch(err => console.error('Could not connect to MongoDB..', err))

1

이 라인은 다른 모든 지원 중단 경고에 대한 트릭을 수행했습니다.

const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);

1

mlab.com을 MongoDB 데이터베이스로 사용하고있었습니다. 연결 문자열을 config파일 keys.js 와 다른 폴더로 분리했습니다. 연결 문자열 은 다음과 같습니다.

module.exports = {
  mongoURI: "mongodb://username:password@ds147267.mlab.com:47267/projectname"
};

그리고 서버 코드는

const express = require("express");
const mongoose = require("mongoose");
const app = express();

// Database configuration
const db = require("./config/keys").mongoURI;

// Connect to MongoDB

mongoose
  .connect(
    db,
    { useNewUrlParser: true } // Need this for API support
  )
  .then(() => console.log("MongoDB connected"))
  .catch(err => console.log(err));

app.get("/", (req, res) => res.send("hello!!"));

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`)); // Tilde, not inverted comma

위에서와 같이 연결 문자열 뒤에 {useNewUrlParser : true}를 작성해야합니다.

간단히 말해서, 당신은해야합니다 :

mongoose.connect(connectionString,{ useNewUrlParser: true } 
// Or
MongoClient.connect(connectionString,{ useNewUrlParser: true } 
    


1

내 프로젝트에 몽구스 버전 5.x를 사용하고 있습니다. 몽구스 패키지가 필요한 경우 다음과 같이 값을 전체적으로 설정하십시오.

const mongoose = require('mongoose');

// Set the global useNewUrlParser option to turn on useNewUrlParser for every connection by default.
mongoose.set('useNewUrlParser', true);

0

문자 가 username있거나있는 경우 다음과 같이 사용하십시오.password@

mongoose
    .connect(
        'DB_url',
        { user: '@dmin', pass: 'p@ssword', useNewUrlParser: true }
    )
    .then(() => console.log('Connected to MongoDB'))
    .catch(err => console.log('Could not connect to MongoDB', err));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.