これは、データベースに接続するために使用するコードです。
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug('Connected to MongoDB at %O', databaseUri);
return Mongoose.connection;
});
}
今日、Mongooseをバージョン4.11.0に更新しました。テストを実行すると、次の警告が表示されました。
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
「useMongoClientを設定する」方法に関する情報が見つかりません。
みんな知ってる?
TypeScriptなしこの問題をほとんど無視してMongoose.connect(databaseUri, { useMongoClient: true })
を使用できます。
警告を避けたい場合は、バージョン4.11.0を避けてください。
バージョン4.11.1に更新しましたが、@ types/mongoose @ 4.7.18はまだ更新されておらず、useMongoClient
のフィールドConnectionOptions
に言及していないため、モジュールをインポートする方法は次のとおりです。
const Mongoose = require('mongoose');
そして、この関数を使用しました:
private connectDatabase(databaseUri: string): Promise<any> {
return Mongoose.connect(databaseUri, { useMongoClient: true })
.then(() => {
console.log('Connected to MongoDB at ', databaseUri);
return Mongoose.connection;
})
.catch(err => debug(`Database connection error: ${err.message}`));
}
これがseMongoClient:mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
の使用方法です
{useMongoClient:true}をconnectまたはcreateConnectionメソッドの別の引数として追加します。これは、使用しているmongooseのバージョンに依存します。
// Using `mongoose.connect`...
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
// Or `createConnection`
var promise = mongoose.createConnection('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
誰もこれを試しましたか?これを使用すると、廃止された警告が消えました、それはドキュメントからでした
これに対する最も簡単な修正方法は、ターミナルを開き、ディレクトリをルートプロジェクト(package.json
があるフォルダ)に変更することです。
実行:npm remove mongoose
その後:
npm install [email protected] --save
問題が解決しました。
アップグレードが常に最良の選択肢とは限りません。
多くの回答が言うように、{ useMongoClient: true }
をoptions引数にconnect
またはcreateConnection
メソッドに追加すると問題が解決します。
例えば.
// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });
// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });
しかし、そもそもMongoClinetとは何ですか?
MongoDB Node.jsドライバーバージョン1.2から、すべての公式ドライバーで同じ名前を持つ新しい接続クラスMongoClientが導入されました。
新しい接続クラスMongoClientは、確認がオフになっている既存の接続クラスDbとは対照的に、MongoDBへのすべての書き込みを確認します。
{ useMongoClient: true }
は、古い接続クラスではなく、新しい接続クラスを使用するようにmoongooseに指示します
詳細情報 ここをクリック
Mongoose 4.11.xでMongoDBに接続します(mLabシングルインスタンスとMongoDB Atlasレプリカセットの両方でテスト済み):
const mongoose = require( 'mongoose'); mongoose.Promise = global.Promise; const options = { promiseLibrary:global.Promise、 useMongoClient:true、 }; function connect(){ mongoose.connect(URI、オプション) .then(function(){ const admin = new mongoose.mongo.Admin(mongoose.connection.db); admin.buildInfo(function(err、info ){ if(err){ console.err( `MongoDB情報の取得エラー:$ {err}`); } else { console.log ( `MongoDBへの接続(バージョン$ {info.version})が正常に開かれました!`); } }); }) .catch(( err)=> console.error( `MongoDBへの接続エラー:$ {err}`)); } module.exports = connect;
モデルを作成:
const mongoose = require( 'mongoose'); const userSchema = new mongoose.Schema({...}); module.exports = mongoose.model( 'User'、userSchema);
これの最も簡単な修正:
ターミナル経由でプロジェクトのルートフォルダーで次のコマンドを実行します。
npm remove mongoose
npm install [email protected] --save
問題が解決しました。
アップグレードが常に最良の選択肢とは限りません。
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/starbucks', {
useMongoClient: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('openUri', function() {
// we're connected!
});
mongoose
documentation によると、これがuseMongoClient
の設定方法です。
function connectDatabase(databaseUri){
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
});
return promise;
}
エラー:
(ノード:1652)非推奨警告:open()
はmongoose> = 4.11.0で非推奨になり、代わりにopenUri()
を使用するか、connect()
またはcreateConnection()
を使用する場合はuseMongoClient
オプションを設定します。
Solution:接続プロパティにuseMongoClient:trueを設定するには
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
http://mongoosejs.com/docs/connections.html#use-mongo-client を参照してください