いくつかの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.18
でmongodb
ドライバーを使用しています。どちらもnpm install
を使った最新のものです。
古いバージョンのmongodbドライバを使う:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
モンゴのバージョンを確認する
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を変更するための進行中の作業の一部です。
現在の警告を引き起こすそのような変更の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
リリースが期待される依存関係を超えて "更新"されないことを保証します。
下の強調表示されたコードでmongoose接続がmongooseドライバの警告を解決
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
接続文字列の形式は mongodb:// user:password @ Host:port/db です。
例えば:
MongoClient.connect('mongodb://user:[email protected]:27017/yourDB', { useNewUrlParser: true } )
Mongoose.connect()メソッドに{ useNewUrlParser: true }
を追加する必要があります。
mongoose.connect('mongodb://localhost:27017/Notification',{ 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();
}
})
この問題は、ポート番号を指定してこのパーサーを使用することで解決できます。
mongoose.connect("mongodb://localhost:27017/cat_app", { useNewUrlParser: true });
それは私の問題を解決します。
{ useNewUrlParser: true }
を追加する必要はないと思います。
新しいURLパーサーをすでに使用したい場合は、あなた次第です。やがて、mongoが新しいURLパーサに切り替えると、警告は消えます。
編集: ここで指定したとおり https://docs.mongodb.com/master/reference/connection-string/ /ポート番号を設定する必要はありません。
{ useNewUrlParser: true }
を追加するだけで十分です。
これは私がどのように持っているかです、ヒントは私が数日前にnpmを更新するまで私のコンソールに現れませんでした。
.connectには3つのパラメータ、URI、オプション、およびエラーがあります。
mongoose.connect(
keys.getDbConnectionString(),
{ useNewUrlParser: true },
err => {
if (err) throw err;
console.log(`Successfully connected to database.`);
}
);
**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.");
});
追加するだけです
{useNewUrlParser:true}
mongoose.connectメソッド内
間違った 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
}
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()
},
)
})
}
これらの行は、他のすべての廃止予定の警告にも役立ちます。
const db = await mongoose.createConnection(url, { useNewUrlParser: true });
mongoose.set('useCreateIndex', true);
mongoose.set('useFindAndModify', false);
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 }