私はMongooseと協力しています。多くの開発者が次のコマンドを作成するのを見てきました。
mongoose.Promise = global.Promise;
それから、mongoose.Promise
の元の値が何なのか興味がありました。エディターに次のコマンドを入力しました。
const mongoose = require("mongoose");
console.log("promise: ", mongoose.Promise);
私のコンソールは私を返しました:
promise:function Promise(){[ネイティブコード]}
さて、なぜMongooseの約束は既にネイティブコードを返すので、コマンドmongoose.Promise = global.Promise
を作成するのでしょうか。私はその点を理解していません。誰かが私たちを理解するのを手伝ってくれるなら、素晴らしいでしょう、
ありがとう
これは、Mongoose 5では不要な古いサンプルのレガシーコードです。
Mongoose 4は、独自のpromise実装mpromise
に依存していました。 mongoose.Promise
は必ずしもPromise
グローバルではありませんでした。
Mongoose 4ドキュメント 状態:
Mongoose 5.0はデフォルトでネイティブプロミス(またはネイティブプロミスが存在しない場合はbluebird)を使用しますが、独自のES6互換プロミスライブラリへのプラグインを引き続きサポートします。 Mongoose 5.0はmpromiseをサポートしません。
ブルーバードに関する声明はもはや真実ではありませんが。 Mongoose 5は、ネイティブプロミスを持たないNodeバージョンのサポートを廃止しました。
mongoose.Promise = global.Promise;
mongooseのインポート後にglobal.Promise
が別の実装(ブルーバードなど)に割り当てられた場合、まだ必要かもしれませんが、代わりにglobal.Promise = Bluebird
を割り当てる方が良いでしょう。
コード内の異なる位置でmongooseを使用する場合は、グローバルモードとして表示する必要があります。そのため、mongooseを次のように設定する必要があります。
mongoose.Promise = global.Promise;
mongoDBデータベースに接続したい時点で使用しました。
var mongoose = require('mongoose');
var mongoDB = ' database url ';
mongoose.connect(mongoDB);
mongoose.Promise = global.Promise;
mongoose.connection.on('error',console.error.bind(console, 'MongoDB connection error:'));
スキーマを作成し、独自のモデルを実行する必要があります
最初に、mongooseは非同期アプリケーションにPromiseを使用します。新しいバージョンでは次のようになります。
mongoose.connect("URL").then("what you need to happen after the connection is done").catch("when the error happened")
したがって、mongooseを記述するときは、promiseとglobalを使用して、Asyncとしてどこでもmongooseを使用します。