web-dev-qa-db-ja.com

Mongoose-mongooseモジュールを設定するときに「mongoose.Promise = global.Promise」を作成する理由

私はMongooseと協力しています。多くの開発者が次のコマンドを作成するのを見てきました。

mongoose.Promise = global.Promise;

それから、mongoose.Promiseの元の値が何なのか興味がありました。エディターに次のコマンドを入力しました。

const mongoose = require("mongoose");

console.log("promise: ", mongoose.Promise);

私のコンソールは私を返しました:

promise:function Promise(){[ネイティブコード]}

さて、なぜMongooseの約束は既にネイティブコードを返すので、コマンドmongoose.Promise = global.Promiseを作成するのでしょうか。私はその点を理解していません。誰かが私たちを理解するのを手伝ってくれるなら、素晴らしいでしょう、

ありがとう

21
Webwoman

これは、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を割り当てる方が良いでしょう。

28
Estus Flask

コード内の異なる位置でmongooseを使用する場合は、グローバルモードとして表示する必要があります。そのため、mongooseを次のように設定する必要があります。

mongoose.Promise = global.Promise;
2
Azkri Said

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

スキーマを作成し、独自のモデルを実行する必要があります

0
Azkri Said

最初に、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を使用します。

0
mohammed alreai