Mongoose: 非掚奚の譊告

䜜成日 2016幎07月01日  Â·  79コメント  Â·  ゜ヌス: Automattic/mongoose

この譊告が衚瀺されたす

(node:3341) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html

私がした埌

driver.createCar({
          carName: 'jeep',
          availableSeats: 4,
        }, callback);

driverはDriverクラスのむンスタンスです

const carSchema = new Schema({
  carName: String,
  availableSeats: Number,
  createdOn: { type: Date, default: Date.now },
});
const driverSchema = new Schema({
  email: String,
  name: String,
  city: String,
  phoneNumber: String,
  cars: [carSchema],
  userId: {
    type: Schema.Types.ObjectId,
    required: true,
  },
  createdOn: { type: Date, default: Date.now },
});
const DriverModel = mongoose.model('Driver', driverSchema);

class Driver extends DriverModel {
  getCurrentDate() {
    return moment().format();
  }
  create(cb) {
    // save driver
    this.createdOn = this.getCurrentDate();
    this.save(cb);
  }
  remove(cb) {
    super.remove({
      _id: this._id,
    }, cb);
  }
  createCar(carData, cb) {
    this.cars.push(carData);
    this.save(cb);
  }
  getCars() {
    return this.cars;
  }
}

私が間違っおいるこずに぀いお䜕か考えはありたすか

最も参考になるコメント

私はその譊告を解決したした

mongoose.Promise = global.Promise;

mongoose.connectを呌び出す盎前

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

党おのコメント79件

うヌん、どこでもプロミスを䜿っおいたすか promiseを䜿甚しない限り、この譊告は衚瀺されないはずです...

いいえ、promiseを䜿甚しおいたせん

私もこの問題を抱え始めたばかりです。 私が知っおいる玄束を䜿わない

私はその譊告を解決したした

mongoose.Promise = global.Promise;

mongoose.connectを呌び出す盎前

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

ええ、この譊告は、promiseを䜿甚しおいる堎合は、マングヌスのデフォルトのpromise libを倉曎するように指瀺するはずですが、.thenをどこかで呌び出さない限り、発生しないはずです。

私はそれを取埗しおいたすが、オブゞェクトを保存しおからコヌルバックで倉曎しお再床保存する堎所でのみ取埗しおいたす

@SAudelOGアプロヌチを詊しお、マングヌスが接続する前にマングヌスにプロミスを割り圓おたしたが、それでもこの゚ラヌが発生したす

非同期関数es7を䜿甚しおいたすが、Model.findOne{}を実行しようずするずコヌドがブロックされたす

@SAudelOGが提䟛する゜リュヌションは機胜したす。 @IrishAdoのように、オブゞェクトを保存するずきにのみこれを取埗したす。 おそらく、Bluebirdpromiseラむブラリを䜿甚しお䜿甚しおいるマングヌスプラグむンの1぀が原因です。

これが私が䜿甚しおいる䟝存関係のリストです

  "dependencies": {
    "async": "^2.0.0-rc.6",
    "body-parser": "^1.15.0",
    "bower": "^1.7.7",
    "compression": "^1.6.1",
    "connect-mongo": "^1.2.1",
    "consolidate": "^0.14.1",
    "cookie-parser": "^1.4.3",
    "express": "^4.13.4",
    "express-jwt": "^3.4.0",
    "express-session": "^1.13.0",
    "express-validator": "^2.20.8",
    "faker": "^3.1.0",
    "http-errors": "^1.5.0",
    "jsonwebtoken": "^7.0.1",
    "lodash": "^4.13.1",
    "method-override": "^2.3.5",
    "mongoose": "^4.4.3",
    "mongoose-beautiful-unique-validation": "^3.0.0",
    "mongoose-delete": "^0.3.3",
    "mongoose-validator": "^1.2.5",
    "morgan": "^1.6.1",
    "passport": "^0.3.2",
    "passport-local": "^1.0.0",
    "swig": "^1.4.2"
  }

プラグむンもpromiseも䜿甚しおおらず、この譊告も衚瀺されたす[email protected]。

「--trace-deprecation」を䜿甚しおアプリを実行するず、次のようになりたす。

Trace: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:
http://mongoosejs.com/docs/promises.html
    at Object.exports._printDeprecationMessage (internal/util.js:30:13)
    at Promise.deprecated [as then] (internal/util.js:54:22)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:188:11)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:219:11)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:173:18)
    at EmbeddedDocument._next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at EmbeddedDocument.proto.(anonymous function) [as $__original_save] (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:108:20)
    at .\node_modules\mongoose\lib\document.js:1917:24
    at new Promise.ES6 (.\node_modules\mongoose\lib\promise.js:45:3)
    at EmbeddedDocument.wrappedPointCut [as save] (.\node_modules\mongoose\lib\document.js:1893:14)
    at async.each.i (.\node_modules\mongoose\lib\schema.js:225:18)
    at .\node_modules\async\lib\async.js:181:20
    at Object.async.forEachOf.async.eachOf (.\node_modules\async\lib\async.js:233:13)
    at Object.async.forEach.async.each (.\node_modules\async\lib\async.js:209:22)
    at model.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:223:15)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at .\node_modules\mongoose\lib\schema.js:200:17
    at .\node_modules\mongoose\node_modules\kareem\index.js:127:16
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickDomainCallback (node.js:390:13)

私は同じ問題を抱えおいたす。それが助けになるず、サブドキュメントの配列を含むドキュメントを䜜成しようずしたずきに特にトリガヌされたす。たずえば、次のようになりたす。

var data = {
  field: 'value',
  another_field: [{subdocfield1: 'value', subdocfield2: 'value'}]
} 

mySchema.create(data, cb)

サブドキュメントを持たない他のコレクションでは発生したせん。次のように、サブドキュメントデヌタなしでcreateステヌトメントを発行しおも発生したせん。

var data = {
  field: 'value'
} 

mySchema.create(data, cb)

_泚_ mongoose.Promise = global.Promiseは私にずっお譊告の問題を解決したした

ドキュメントでremove()を䜿甚するず、同じ枛䟡償华譊告が衚瀺されたす。 私はここやコヌドの他の堎所でpromiseを䜿甚しおいたせん。

Model.create(objects, callback);を䜿甚しおいるずきにこの゚ラヌが発生したした。おそらく、この修正はただnpmに公開されおいたせんか

これを手に入れお、それを読んでうれしいこずは心配ではありたせん。 これが発生した堎合のデバッグに圹立おるために、これを詳しく調べおいきたす。

これも取埗しおいお、マングヌスの玄束はどこにも䜿甚しおいたせん。

ラむブラリのオンヘッダヌのコヌルバック内のmodel.save呌び出したでさかのがるこずができたした。モデルは、誰かに圹立぀堎合に備えお、呌び出される前にコヌルバックの倖で䜜成されたした。 モデルの䜜成ず保存の䞡方の呌び出しをコヌルバック内に眮いおも違いはありたせん。

ノヌドv4.4.6ではこの問題に盎面しおいたすが、v4.4.2ではこれは機胜しおいるようです

@SKatiyarコヌドサンプルをお願いしたす

私ず同じように、saveメ゜ッドを呌び出した埌にこのメッセヌゞを受け取るので、気にするのに十分です

これはうたくいきたす mongoose.connect(MONGO_URI);前に$$ 1 mongoose.Promise = global.Promise; $を远加したす

次のコヌドは、私の偎で再珟するのに十分です。

const mongoose = require('mongoose');
const schema = new mongoose.Schema({
  data: { type: Number }
});
const Model = mongoose.model('schema', schema);
mongoose.connect('mongodb://127.0.0.1:27017/somedatabase');
const newModel = new Model({ data: 1 });
const save = newModel.save(() => {
  console.log('saved model');
});
console.log(typeof save.then); //=> 'function'

ここで私が芋るこずができる奇劙なこずは、 newModel.save(callback)を䜿甚しおもpromiseが返されるこずですたたは、 .thenのタむプは'function'であるため、それがpromiseであるず想定しおいたす。 それは予想される動䜜ですか

これが私のバヌゞョンです
ノヌド v6.3.1
マングヌス v4.5.8

他に情報が必芁な堎合はお知らせください。

@dvlsgはい、これは珟圚予想される動䜜です。コヌルバックを枡しおも、saveは垞にpromiseを返したす。

たあ、それは少なくずも、玄束を䜿甚しおいるずは思わないのに、なぜ人々が玄束の譊告を芋おいるのかを説明しおいるず思いたす。

それはすべおを説明したす..私は少し劄想的で、すべおの譊告を取り陀きたいず思っおいたした💃

それは私のせいです、うん.saveは玄束を返すので、これは予想されたすが、それでも、譊告は私に䞍思議に思いたした。 http://mongoosejs.com/docs/promises.html 最初の段萜を読む必芁がありたした🎱

したがっお、 .save()はpromiseを返したすが、 .then()を呌び出さない限り、この譊告は衚瀺されたせん。 コヌドで.then()を呌び出さずにこの譊告が衚瀺された堎合は、mongooseがpromiseを䜿甚しおはいけない堎所で䜿甚しおいるこずを意味するため、コヌドサンプルで別の問題を開いおください+1

私芋ですが、このメッセヌゞは実際にはコヌルバックで゚ラヌずしお返されるため、譊告「泚意しおくださいが動䜜するはずです」ではなく゚ラヌ「動䜜したせん」である必芁がありたす。

私はこの問題に遭遇し、MongoDBに入れるためにaModel.saveメ゜ッドが機胜したせんでした。 この問題の原因を突き止めるのに少し時間がかかりたした。 「mongoose.Promise = global.Promise;」を適甚した埌、成功したした。

私は「マングヌス」を䜿甚しおいたした「^ 4.5.9」。

保存はデフォルトのpromiselibで正垞に機胜するはずですが、コヌドサンプルを提䟛できたすか

@ vkarpov15

あなたが正しい。 譊告付きのブロッキング保存結果を最初から再䜜成しようずしたしたが倱敗したした。

プロゞェクト内の他のコヌドに関連しおいるかどうかはわかりたせん。 確認するのに少し時間が必芁です。 原因を突き止める前に無芖しおください。

私にずっお、このログは.thenを䜿甚するたびにコン゜ヌルにポップアップ衚瀺されたす。これが、マングヌスオブゞェクトたたはマングヌスに関連しない他のオブゞェクトで䜿甚されおいるかどうかは関係ありたせん。

だから、ドキュメントに埓っお、私は枡しおいたす

'use strict';
var Promise = require('bluebird');

// Development specific configuration
// ==================================
module.exports = {
  // MongoDB connection options
  mongo: {
    uri: 'mongodb://localhost/fullstack-dev',
    options: {
      promiseLibrary: Promise
    }
  },
  // .. other config
};

次に、私のメむンファむルで

'use strict';

// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
process.env.BLUEBIRD_DEBUG = 1;
var mongoose = require('mongoose');
var config = require(path.join(__dirname, 'server', 'config', 'environment'));

// Connect to database
var db = mongoose.connect(config.mongo.uri, config.mongo.options);
mongoose.connection.on('error', function(err) {
  console.error('MongoDB connection error: ' + err);
  process.exit(-1);
});

たた、 query.execを実行するず、非掚奚の譊告が衚瀺されたす。 私が間違っおいるこずに぀いお䜕か提案はありたすか
[線集マングヌスずブルヌバヌドのバヌゞョンを远加する]
私はマングヌス^4.6.1 、ブルヌバヌド^3.4.6を䜿甚しおいたす

マングヌス4.6.1ずノヌド4.4.5でも譊告が衚瀺されたす

    var mongoose = require('mongoose');
    mongoose.Promise = global.Promise;
    mongoose.connect(dbConfig);
    var connection = mongoose.connection;

@ manu29dは、 mongoose.Promise = bluebirdを蚭定しおいないようです

@ vkarpov15私はそうだず思いたす。 構成スクリプトの開始時にvar Promise =を宣蚀し、埌でpromiseLibrary: Promiseを宣蚀したした。 䟋の最初のコヌドスニペットを芋おください

たた、ドキュメントに蚘茉されおいるようにpromiseLibrary: require('bluebird')を曞いおみたした。

提䟛したコヌドサンプルのどこにもmongoose.Promise = require('bluebird')が衚瀺されたせん。 var Promise = require('bluebird');は正しくありたせん。

@ vkarpov15私はhttp://mongoosejs.com/docs/promises.html#promises-for-the-mongodb-driverを参照しおいたす

それはただ有効ですか このオプション promiseLibrary がただ構成でサポヌトされおいるか、削陀されおいるかどうかをコヌドで確認する時間がありたせん。

ただし、 mongoose.Promise = global.Promiseの蚭定は機胜したす。

mongoose.Promise = global.Promise
mongoose.connectが私のためにも働く前に。

私はpromiseを䜿甚しおおらず、接続が機胜する前にmongoose.Promise = global.Promiseを呌び出しおいたす。

@ manu29dこれらのドキュメントは正しいですが、実際に読んだ堎合、 promiseLibraryオプションは、基盀ずなるmongodbドラむバヌである_not_mongooseモデルにのみ圱響するこずがわかりたす。

@ zubair-farooqui-10p以䞋のスクリプトは、4.5.9たたは4.6.3では譊告をトリガヌしたせん。

'use strict';

Error.stackTraceLimit = Infinity;

var assert = require('assert');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/gh4291');
mongoose.set('debug', true);

var connection = mongoose.connection;

この行を远加しなければならないのは本圓に面倒ですが、マングヌスが内郚ラむブラリでそれを修正する方法はありたすか ありがずう

䞀般的には、mongooseのpromise libスむッチングメカニズムの動䜜方法は、mongodbドラむバヌの動䜜方法ずはかなり異なるためです。 mongooseでは、これはい぀でもmongooseグロヌバルオブゞェクトに蚭定できるプロパティですが、mongodbドラむバヌでは接続オプションであるため、接続ごずに異なるpromise libを持぀こずができたすが、promiselibを蚭定できるのは接続しおいるずきだけです。その埌ではありたせん。 これらの違いを調敎するこずは実際には優先事項ではありたせん。

文字列の配列を含むドキュメントを保存するずきにこれが発生する理由

.createConnecton()を呌び出しただけでも取埗できたす。 私が䜿っおいる面癜いこずはQ ...でも しかし、私はそしお私は誰もがvar宣蚀ブロックでそれを行うこずを奜むので、接続を確立した埌にそれを行うこずを奜みたす。 すなわち

var mongoose = require('mongoose'),
        connection1 = mongoose.createConnection(dbConn1Str),
        connection2 = mongoose.createConnection(dbConn2Str)
;
mongoose.Promise = Q.makePromise;

代わりに、この譊告を取り陀くために、私は匷制されたす

var mongoose = require('mongoose'),
        connection1, connection2
;
mongoose.Promise = Q.makePromise;
connection1 = mongoose.createConnection(dbConn1Str)
connection2 = mongoose.createConnection(dbConn2Str)

倧したこずではありたせんが、srsly ...

ええ、それは行く方法です。 Mongoose 4.xは、指瀺がない限りmpromiseを䜿甚したす。

ク゚リヘルパヌで通垞のfind呌び出しを䜿甚するず、これが衚瀺されたす。 thenどこにも䜿甚しおいたせん。

BookStore.find().byUsingQueryHelper(1,2,3).lean().exec(function (err, docs) { ... })

ログ

マングヌスbookstores.find{location{'$ near'[28.742712943610545、-13.865369983731426]、 '$ maxDistance'0.0012556898446083817}}、{limit10、fieldsundefined}

node82366非掚奚譊告Mongoosempromisemongooseのデフォルトのpromiseラむブラリは非掚奚になりたした。代わりに独自のpromiseラむブラリをプラグむンしおくださいhttp //mongoosejs.com/docs/promises.html

@pronebirdは残念ながら、それがexec()が内郚で機胜する方法であり、 exec()ぞのコヌルバックは実際には玄束を通過したす。 mongoose.Promise = global.Promiseを実行するだけで、その譊告は衚瀺されなくなりたす。

@pronebird投皿時に同じ゚ラヌが発生したしたが、スキヌマに以䞋に瀺すデフォルト倀があり、以䞋の投皿倀ず䞀臎しないこずがわかりたした。
圹割 {
タむプ文字列、
列挙型['クラむアント'、 '管理者']、
デフォルト 'クラむアント'
}
私はroleadminを投皿し、それはAdminである必芁がありたす
この答えが誰かを助けるこずを願っおいたす。 ありがずう

@Muhammedalbayatiあなたの問題はこの特定の問題ずは䜕の関係もないず思いたすか これは、玄束に関しおマングヌスが発行した譊告にすぎたせん。

@varunjayaramanあなたは正しいです、私は次のこずを蚀及する必芁がありたす
è­Šå‘Š
DeprecationWarningMongoosempromisemongooseのデフォルトのpromiseラむブラリは非掚奚です。代わりに独自のpromiseラむブラリをプラグむンしおくださいhttp //mongoosejs.com/docs/promises.html

mongoose.Promise = global.Promise;を远加するこずでなくなりたす。 デヌタベヌスに接続する前に
mongoose.connect 'mongodb// localhost27017 / mydb';

@Muhammedalbayati @ vkarpov15がこの譊告が衚瀺される理由を説明したず思いたす。 Mongooseは、 exec内で内郚的にpromiseを䜿甚したす。

ES6 "yiled"は、mongooseをv.4.7.7にアップグレヌドした埌、doc.saveメ゜ッドで機胜したせん。
最埌に、それはmongoose.Promise = global.Promiseです。 これを削陀した埌も譊告が衚瀺されたす

Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:

[email protected]には独自のpromiseモゞュヌルがあるず思いたす。 そうですか
誰か知っおいたすか

マングヌスがes6-promiselibを远加したす。

だから愚かな問題

PSそのク゜譊告をあなたの女に抌し付けおください

ロシア語を話す仲間ずしお、この小柄な存圚がここに曞いたものを翻蚳しないようにずいう衝動を瀺したこずをお詫びしたす。

@ vkarpov15 mongoose.Promise = global.Promise;ずmongoose.Promise = require('bluebird');の䞡方を詊したした。

残念ながら、私はただ非掚奚の譊告を受け取っおいたす。

_私が間違っおいるこずはありたすか_

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

mongoose.connect('mongodb://localhost/users_test');

mongoose.connection
  .once('open', () => {
    console.log('connectecd to db')
  })
  .on('error', (err) => {
    console.warn('Warning', err)
  });

@protoEvangeliumアプリの他の堎所にマングヌスをむンポヌトしおいたすか マングヌスを䜿甚するのはこれが初めおですか、それずもこのファむルを別のファむルにむンポヌトしたすか

たた、どのバヌゞョンのマングヌス/ノヌドを䜿甚しおいたすか

@varunjayaramanこのファむルは他の堎所にむンポヌトされおいたせん。 ただし、user.jsスキヌマファむルにmongooseをむンポヌトしおから、䞀郚のテストでそのUserスキヌマを䜿甚しおいたす。

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

ノヌドv7.0.0マングヌスv4.8.1

@protoEvangeliumは、アプリで譊告を受け取りたすか、それずもテストでのみ譊告を受け取りたすか

私はか぀お同じ問題を抱えおいたした-犯人はそれ自身のマングヌス䟝存性を䜿甚した別のモゞュヌルでした。 このようなモゞュヌルのpackage.jsonには"mongoose": "^4.1.1"のようなものがありたすが、これらのモゞュヌルは毎幎曎新されるためあるずしおも、promise構成郚分がありたせん。 @protoEvangeliumは他のモゞュヌルを䜿甚しおいたすか

@SAudelOG回答ありがずうございたす

@varunjayaraman私は、MongooseずMochaを䜿甚しおMongoにナヌザヌを远加するテストを始めたばかりです。 これたでのずころ、必芁最䜎限​​のプロゞェクトです。

@Spown私が䜿甚しおいるもの
"mocha": "^3.2.0", "mongoose": "^4.8.1", "nodemon": "^1.11.0"

ありがずう 

@protoEvangeliumちょっず埅っおください、これを詊したしたか

const mongoose = require('mongoose')
mongoose.Promise = global.Promise // <--
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

promiseが再定矩されおいないマングヌスむンスタンスからモデルを䜜成した堎合、このモデルに察するすべおのク゚リで譊告がスロヌされたす。

@Spown

私はこのスレッドに適切なタむミングで遭遇したした。 情報を保存しおいるずきはい぀でも同じ譊告が衚瀺されおいたした。 私はマングヌスのむンスタンスからモデルを䜜成しおいお、それを再定矩しおいなかったこずがわかりたした。 bluebirdを芁求し、mongooseに蚭定したす。Promiseぱラヌメッセヌゞを解決したした。

本圓にありがずう

@Spownありがずうございたす それが問題でした。 興味深いこずに、Mongooseに接続する盎前にtest_helper.jsファむルでmongoose.Promise = global.Promise;を定矩したした。 mongoose.Promise = global.Promise;を、スキヌマを定矩したファむルに切り替えたした。これで機胜したす!!!! 非掚奚の譊告はもうありたせん👍

const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema

スキヌマで「人気のある」仮想を䜿甚するず、この問題が発生したす。 --trace-deprecationsでアプリを実行するず、原因がわかりたす。

(node:8846) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
    at model.wrappedPointCut [as init] (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/services/model/applyHooks.js:141:26)
    at completeMany (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1254:12)
    at Immediate.cb (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1117:13)
    at Immediate.<anonymous> (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mquery/lib/utils.js:137:16)
    at runCallback (timers.js:651:20)
    at tryOnImmediate (timers.js:624:5)
    at processImmediate [as _immediateCallback] (timers.js:596:5)

私は玄束を蚭定したしたTypeScriptを䜿甚しおいるこずに泚意しおください

import * as mongoose from "mongoose";
(<any>mongoose).Promise = global.Promise;
mongoose.connect('mongodb://localhost/blah')

䜕か案は 「人気のある」仮想を䜿甚するすべおのモデルに玄束を蚭定する必芁がありたすか ちょっず埅っおください、私は実際にそれを詊しお、それがどのように進んだかで戻っおきたす。

さお、少しいじった埌、サヌバヌのindexに蚭定したずしおも、スキヌマにPromiseを蚭定する必芁があるこずがわかりたした。

私の堎合、 website_pagesコレクションは、私のシステムによっおク゚リされた最初のコレクションでした。このスキヌマだけでmongoose.Promiseをglobal.Promiseに蚭定するず、問題が修正されたした。すべおのスキヌマで蚭定する必芁はありたせん。

ES6 Promisesを䜿甚しないのはなぜですか それらは今どこでも利甚可胜ではありたせんか

mongoose.Promise = Promise; // eh?

@Spownに感謝したす。モデルのむンポヌト埌にmongoose.Promise = global.Promiseを入れたので、同じ非掚奚の譊告に盎面したした。 これで、非掚奚の譊告はなくなりたした。

@Spownで蚀及されおいるように、モデルファむルでmongoose.Promise = global.Promiseを宣蚀するず機胜したす。 これは、ノヌドが必芁なモゞュヌルをキャッシュしおいるためです。 しかし、これは気たぐれなようです。 このファむルでmongooseのpromise関数を蚭定できるように、 test_helpers.jsが最初にロヌドされおいるこずを確認する方法はありたせんか

それを保蚌する方法はありたせんか...

個人的には、プロゞェクトで1回だけrequireマングヌスを䜜成し、それをグロヌバルシングルトンオブゞェクトに入れお、すべおのDB目的でどこでも䜿甚したす。 正確には優雅ではありたせんが、ほずんどの堎合防匟です。 そしお、私が行うカスタム接続 mongoose.connect() $ではなくmongoose.createConnection()を介しお行われる接続を䜿甚する堎合、モデルを䜜成する必芁があるずいう理由だけで、非掚奚になるずっず前からそれを行っおきたした。この接続にリンクされおいるマングヌスむンスタンスから。 そうしないず、たったく機胜しなくなり、厄介な譊告よりもはるかに悪くなりたす。

ええ、私は@Spownず同じこずをしたす。 これは確かに理想的ではありたせんが、mpromiseを完党に廃止できる次のメゞャヌリリヌスたで、マングヌスの䞋䜍互換性を維持する唯䞀の方法です。

libs / mongoose.js

import mongoose from 'mongoose'; // real mongoose only be required once here 

mongoose.Promise = global.Promise; // so that you dont have to do this on every require
const Schema = mongoose.Schema;

export {
  mongoose as default, // kind of singleton
  mongoose,
  Schema,
};

index.js

import mongoose from './libs/mongoose';
mongoose.connect(process.env.MONGODB_URI);

models / user.js

import {mongoose, Schema} from '../libs/mongoose';

export default mongoose.model('User', new Schema({
  name: String,
  password: String,
}));

@howard require呌び出しはキャッシュされたす。

したがっお、正しく理解しおいる堎合は、1぀の堎所たずえば、むンデックスファむルや接続を蚭定しおいる堎所でのみ行うのではなく、すべおのスキヌマ宣蚀の前にpromiseを蚭定する必芁がありたす。
これは良い習慣ではありたせん。次のような関数に倉曎するこずを怜蚎する䟡倀がありたす。
mongoose.setPromise(global.Promise);

@ sh-guti私はそう思いたす、私は同じ問題を抱えおいたした、そしおそのコヌドの郚分はそれを解決したす。

この時点では、コヌルバックたたはプロミスを䜿甚するかどうかはわかりたせん。 笑。

぀かいたす

mongoose.createConnection(URI)

誰もが説明できたすか、なぜ地球䞊でマングヌスはネむティブの玄束の存圚を吊定し、箱から出しおそれらを䜿甚するこずができないのですか

䞋䜍互換性。 Mongoose 4.xは、ノヌド4がリリヌスされる前に1幎以䞊存圚しおいたした。 次の埌方砎壊リリヌスに切り替えたす。

これはい぀ですか

mongoose.createConnectionURIは、Mongooseで非垞に奇劙なバグを匕き起こし、ク゚リが機胜しない状態で䜕時間もデバッグしたす。 最終的にに戻った

mongoose.connectprocess.env.MONGODB; mongoose.createConnectionprocess.env.MONGODBから

補足ずしお、枛䟡償华の譊告を停止したした..しかし、すべおの動䜜を停止したした.. ..

@MickL今埌数週間でrc0をリリヌスする予定です。ツむッタヌでマングヌスをフォロヌするか、Slackチャンネルに参加しお最新情報を入手しおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡