Node.js、MongoDB、TypeScriptにおける「current URL string parser is deprecated」警告の回避方法
警告の内容
Node.js の MongoDB ドライバーは、MongoDB 接続文字列を解析するために使用するツールを書き換えました。この変更は重大な変更であるため、新しい接続文字列パーサーはフラグの後ろに配置されています。
このフラグを有効にするには、mongoose.connect()
または MongoClient.connect()
関数に useNewUrlParser
オプションを渡します。
// mongooseの場合
mongoose.connect(uri, { useNewUrlParser: true });
// MongoClientの場合
const client = new MongoClient(uri, { useNewUrlParser: true });
警告が表示される理由
デフォルトでは、mongoose.connect()
または MongoClient.connect()
関数は、以下の警告を出力します。
(node:12345) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
これは、現在の URL 文字列パーサーが廃止予定であり、将来のバージョンで削除されるためです。
警告を回避する方法
この警告を回避するには、以下のいずれかの方法を使用できます。
useNewUrlParser
オプションをtrue
に設定する
上記のように、mongoose.connect()
または MongoClient.connect()
関数に useNewUrlParser
オプションを渡すことで、新しい接続文字列パーサーを有効にすることができます。
mongodb
モジュールのバージョンを 3.6.0 以前にダウングレードする
mongodb
モジュールのバージョン 3.6.0 より前のバージョンでは、この警告は表示されません。
- 上記の方法は、Node.js、MongoDB、TypeScript だけでなく、他の言語やフレームワークでも同様の警告が表示される場合にも適用できます。
- 警告を無視することは可能ですが、将来のバージョンで接続が動作しなくなる可能性があるため、推奨されません。
import mongoose from "mongoose";
mongoose.connect("mongodb://localhost:27017/test", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const schema = new mongoose.Schema({
name: String,
age: Number,
});
const Model = mongoose.model("Model", schema);
const model = new Model({
name: "John Doe",
age: 30,
});
model.save();
import { MongoClient } from "mongodb";
const client = new MongoClient("mongodb://localhost:27017/test", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
client.connect((err, db) => {
if (err) {
console.error(err);
return;
}
const collection = db.collection("test");
collection.insertOne({
name: "John Doe",
age: 30,
}, (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result);
});
});
「current URL string parser is deprecated」警告を回避する他の方法
ただし、この方法は推奨されません。なぜなら、古いバージョンのモジュールにはセキュリティ上の脆弱性がある可能性があるからです。
環境変数 MONGODB_URL を使用する
MONGODB_URL
環境変数を設定することで、mongoose.connect()
または MongoClient.connect()
関数に接続文字列を渡す必要がなくなり、警告を回避できます。
MONGODB_URL=mongodb://localhost:27017/test
ただし、この方法は開発環境でのみ使用することを推奨します。なぜなら、本番環境では環境変数を設定するのが難しい場合があるからです。
接続文字列に ?retryWrites=true を追加する
接続文字列に ?retryWrites=true
を追加することで、警告を回避できます。
mongoose.connect("mongodb://localhost:27017/test?retryWrites=true", {
useUnifiedTopology: true,
});
ただし、この方法は推奨されません。なぜなら、retryWrites
オプションは、接続の問題が発生した場合にのみ使用すべきオプションだからです。
警告を無視する
どの方法を選択するべきか
どの方法を選択するべきかは、開発環境と本番環境、そしてセキュリティ上のリスクなどを考慮する必要があります。
- 開発環境では、警告を無視するか、
mongodb
モジュールのバージョンをダウングレードする方法を選択してもよいでしょう。 - 本番環境では、
useNewUrlParser
オプションを設定するか、環境変数MONGODB_URL
を使用するを選択することを推奨します。
node.js mongodb typescript