1. ホーム
  2. node.js

[解決済み] (node:3341) DeprecationWarning。Mongoose: mpromise

2023-03-13 18:19:33

質問

mongooseの上にカスタムメソッドを持つクラスを開発しようと思って、自分のクラスでmongooseを拡張しましたが、新しいcarメソッドを作成するために呼び出すと動作しますが、そのストリップとエラーは、私が何をしようとしているかを見ることができます。

このような警告が表示されます。

(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;
 }
}

何が間違っているのか、何か考えはありますか?

どのように解決するのですか?

ドキュメントを読んだ後、この問題を解決するために私が行ったことは次のとおりです。 http://mongoosejs.com/docs/promises.html

docの例ではbluebird promise libraryを使っていますが、私はネイティブのES6 promiseを選びました。

を呼び出しているファイルでは mongoose.connect :

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://10.7.0.3:27107/data/db');

[編集:@SylonZero さんから、私の回答のパフォーマンス上の欠陥を指摘していただき、ありがとうございました。この回答は非常に多くの人に見られているので、私はこの編集を行う義務感を感じ、また bluebird の使用を奨励します。より教育的で経験豊富な詳細については、この回答の下にある回答をお読みください。]