web-dev-qa-db-ja.com

UseNewUrlParserをtrueに設定して、「現在のURL文字列パーサーは廃止予定です」という警告を避けます。

いくつかのMongoDBインスタンスへの接続を確立するデータベースラッパークラスがあります。

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

これは私に警告を与えた:

(node:4833)DeprecationWarning:現在のURL文字列パーサは推奨されておらず、将来のバージョンでは削除される予定です。新しいパーサーを使用するには、MongoClient.connectにオプション{useNewUrlParser:true}を渡します。

connect()メソッドは2番目の引数としてMongoClientOptionsインスタンスを受け取ります。しかしuseNewUrlParserという名前のプロパティはありません。私はこのように接続文字列でそれらのプロパティを設定しようとしました:mongodb://127.0.0.1/my-db?useNewUrlParser=trueしかしそれはそれらの警告に影響を与えません。 

それでは、どのように私はそれらの警告を取り除くためにuseNewUrlParserをセットすることができますか?スクリプトはcronとして実行されるべきであり、それらの警告はゴミメールスパムを引き起こすので、これは私にとって重要です。 

私は3.1.0-beta4の対応する@types/mongodbパッケージと共にバージョン3.0.18mongodbドライバーを使用しています。どちらもnpm installを使った最新のものです。

Workaround

古いバージョンのmongodbドライバを使う:

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

133
Lion

モンゴのバージョンを確認する 

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 をご覧ください。

277
Abhishek Sinha

すでに述べたように、ドライバの3.1.0-beta4リリースは、物事の見た目によって少し早い段階で「野外にリリース」されました。このリリースは、MongoDB 4.0の今後のリリースで新しい機能をサポートし、その他のAPIを変更するための進行中の作業の一部です。

現在の警告を引き起こすそのような変更の1つは、接続URIの受け渡しが実際にどのように機能するかについてのいくつかの変更によるuseNewUrlParserオプションです。それについては後で詳しく説明します。

物事が「落ち着く」までは、おそらく 「固定」することをお勧めします 少なくとも3.0.xリリースのマイナーバージョンには:

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

これは3.1.xブランチがノードモジュールへの "フレッシュ"インストールにインストールされるのを止めるはずです。あなたが既に "beta"バージョンである "最新の"リリースをインストールしたのなら、あなたはあなたのパッケージ(そして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 )リポジトリコードの一部であり、 "new code"は実際には mongodb-core ライブラリからインポートします。 「パブリック」ノードドライバ。

追加される "option"の要点は、新しいコードにオプションを追加することによって移行を "簡単に"することです。そのため、新しいパーサー(実際には url を基にしています)が使用されています。したがって、渡された接続文字列が実際に新しいパーサーが期待しているものに準拠していることを確認します。

将来のリリースでは、「従来の」パーサーは削除され、新しいパーサーは単にオプションがなくても使用されるものになるでしょう。しかし、その頃には、既存のすべてのコードが、既存の接続文字列を新しいパーサーが予期しているものと比較してテストする十分な機会があることが予想されます。

そのため、新しいドライバ機能がリリースされたときにそれを使用したい場合は、利用可能なbeta以降のリリースを使用し、理想的にはMongoClient.connect()useNewUrlParserオプションを有効にして新しいパーサに有効な接続文字列を指定します。

MongoDB 4.0リリースのプレビューに関連する機能に実際にアクセスする必要がない場合は、前述のようにバージョンを3.0.xシリーズに固定してください。これは文書化されたように動作し、安定版を実際にインストールするまで3.1.xリリースが期待される依存関係を超えて "更新"されないことを保証します。

38
Neil Lunn

下の強調表示されたコードでmongoose接続がmongooseドライバの警告を解決

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

接続文字列の形式は mongodb:// user:password @ Host:port/db です。 

例えば:

MongoClient.connect('mongodb://user:[email protected]:27017/yourDB', { useNewUrlParser: true } )
15
Boris Traljić

Mongoose.connect()メソッドに{ useNewUrlParser: true }を追加する必要があります。

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

何も変更する必要はありません。接続関数{useNewUrlParser: true }のみを渡してください。 

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

この問題は、ポート番号を指定してこのパーサーを使用することで解決できます。

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

それは私の問題を解決します。

7
Mehedi Abdullah

{ useNewUrlParser: true }を追加する必要はないと思います。

新しいURLパーサーをすでに使用したい場合は、あなた次第です。やがて、mongoが新しいURLパーサに切り替えると、警告は消えます。

編集: ここで指定したとおり https://docs.mongodb.com/master/reference/connection-string/ /ポート番号を設定する必要はありません。

{ useNewUrlParser: true }を追加するだけで十分です。

6
Sam

これは私がどのように持っているかです、ヒントは私が数日前にnpmを更新するまで私のコンソールに現れませんでした。 

.connectには3つのパラメータ、URI、オプション、およびエラーがあります。 

mongoose.connect(
    keys.getDbConnectionString(),
    { useNewUrlParser: true },
    err => {
        if (err) throw err;
        console.log(`Successfully connected to database.`);
    }
);
4
Hashasaur
**We were using** 
mongoose.connect("mongodb://localhost/mean-course").then(
  (res) => {
   console.log("Connected to Database Successfully.")
  }
).catch(() => {
  console.log("Conntection to database failed.");
});

*-----> This gives url parser error*



**Correct Syntax is**:

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

追加するだけです

{useNewUrlParser:true}

mongoose.connectメソッド内

2
JakeS

ES8用に更新/ await

間違った ES8デモコードMongoDB incが提供する この警告も作成されます。 

MongoDBは次のアドバイスを提供しますが、これは誤りです

新しいパーサーを使用するには、MongoClient.connectにオプション{useNewUrlParser:true}を渡します。

これを行うと、次のエラーが発生します。

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
}
2
mikemaccana

ExpressJS、api呼び出しcase、json送信の完全な例は次のとおりです。

...
app.get('/api/myApi', (req, res) => {
  MongoClient.connect('mongodb://user:[email protected]: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()
        },
      )
  })
}
1
Roman

これらの行は、他のすべての廃止予定の警告にも役立ちます。

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

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

私はmongoデータベースとしてmlab.comを使用していました。接続文字列をconfigという別のフォルダに分割し、keys.jsの中にある接続文字列をそのまま使用しました。 

module.exports = {
  mongoURI: "mongodb://username:[email protected]:47267/projectname"
};

サーバーコードは 

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

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

//connect to mongo DB

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}`)); //tilda not inverted comma

上記のように、接続文字列の後に{useNewUrlParser:true}を記述する必要があります。 

単にあなたがする必要があると置く:

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


      

0
zibon