복붙노트

[MONGODB] (노드 : 3341) DeprecationWarning : 몽구스 : mpromise

MONGODB

(노드 : 3341) DeprecationWarning : 몽구스 : mpromise

나는 내 자신의 클래스와 몽구스를 확장 그래서 나는 내 사용자 지정 방법과 몽구스의 상단에 클래스를 개발하기 위해 노력하고있어하지만 난 여기에, 새 차의 작동 방법하지만 스트립 및 오류를 만들 호출 할 때 나는 당신을하자 내가 할 노력하고있어 참조하십시오.

나는이 경고를 받고 있어요

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

드라이버는 드라이버 클래스의 인스턴스

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

임 잘못을하는 것에 대해 어떤 생각?

해결법

  1. ==============================

    1.여기에 내가 문제를 정리하는 문서를 읽은 후, 근무 내용은 다음과 같습니다 http://mongoosejs.com/docs/promises.html

    여기에 내가 문제를 정리하는 문서를 읽은 후, 근무 내용은 다음과 같습니다 http://mongoosejs.com/docs/promises.html

    해당 문서의 예제에서는 블루 버드 약속 라이브러리를 사용하지만 기본 ES6의 약속으로 이동하기로 결정했습니다.

    파일에서 어디 mongoose.connect를 호출하고 있습니다 :

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

    [편집 : 내 대답에 성능 결함을 데리고에 대한 @SylonZero 감사합니다. 이 답변이 너무 크게 볼 때문에, 나는 의무감이 편집을하는 대신 기본 약속의 블루 버드의 사용을 장려하기 바랍니다. 더 많은 교육과 경험을 자세한 내용은이 하나의 아래에 답을 읽어 보시기 바랍니다. ]

  2. ==============================

    2.위의 대답은 정확하고 작동하는 동안 당신이 진짜, 생산 노드 응용 프로그램이있는 경우, 당신은 성능의 문제에 대한 계정에 있습니다.

    위의 대답은 정확하고 작동하는 동안 당신이 진짜, 생산 노드 응용 프로그램이있는 경우, 당신은 성능의 문제에 대한 계정에 있습니다.

    느린 내가 아래에 공유 한 벤치 마크에서 블루 버드에 비해 4 배이다 - 위의 솔루션은 기본 ES6의 약속을 사용합니다. 이것은 극적으로 노드와 MongoDB를을 사용하여 작성된 API의 성능에 영향을 미칠 수 있습니다.

    나는 블루 버드를 사용하는 것이 좋습니다 :

    // Assuming you store the library in a var called mongoose
    var mongoose = require('mongoose');
    
    // Just add bluebird to your package.json, and then the following line should work
    mongoose.Promise = require('bluebird');
    

    벤치 마크 결과

    플랫폼 : (작성 당시에 최신 노드를 사용하여)

        | file                                      | time(ms) | memory(MB) |
        |-------------------------------------------|----------|------------|
        | callbacks-baseline.js                     | 114      | 25.09      |
        | callbacks-suguru03-neo-async-waterfall.js | 152      | 32.98      |
        | promises-bluebird-generator.js            | 208      | 29.89      |
        | promises-bluebird.js                      | 223      | 45.47      |
        | promises-cujojs-when.js                   | 320      | 58.11      |
        | promises-then-promise.js                  | 327      | 64.51      |
        | promises-tildeio-rsvp.js                  | 387      | 85.17      |
        | promises-lvivski-davy.js                  | 396      | 81.18      |
        | callbacks-caolan-async-waterfall.js       | 527      | 97.45      |
        | promises-dfilatov-vow.js                  | 593      | 148.30     |
        | promises-calvinmetcalf-lie.js             | 666      | 122.78     |
        | generators-tj-co.js                       | 885      | 121.71     |
        | promises-obvious-kew.js                   | 920      | 216.08     |
        | promises-ecmascript6-native.js            | 931      | 184.90     |
        | promises-medikoo-deferred.js              | 1412     | 158.38     |
        | streamline-generators.js                  | 1695     | 175.84     |
        | observables-Reactive-Extensions-RxJS.js   | 1739     | 218.96     |
        | streamline-callbacks.js                   | 2668     | 248.61     |
        | promises-kriskowal-q.js                   | 9889     | 410.96     |
        | observables-baconjs-bacon.js.js           | 21636    | 799.09     |
        | observables-pozadi-kefir.js               | 51601    | 151.29     |
        | observables-caolan-highland.js            | 134113   | 387.07     |
    
  3. ==============================

    3.이 시도 했습니까? 예를 들면 :

    이 시도 했습니까? 예를 들면 :

    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
    

    당신이 약속을 다시 정의되지 않았습니다의 몽구스 인스턴스에서 모델을 만들 경우 -이 모델의 모든 쿼리는 경고를 던질 것입니다.

  4. ==============================

    4.나는 당신이 답을 가지고 있다고 생각하지만 오류 처리와 global.promise를 사용

    나는 당신이 답을 가지고 있다고 생각하지만 오류 처리와 global.promise를 사용

    // MongoDB connection
    mongoose.Promise = global.Promise;
    
    var promise = mongoose.connect('mongodb://localhost:27017/test_db', {
      useMongoClient: true,
    });
    
    promise.then(function(db) {
        console.log("Connected to database!!!");
    }, function(err){
        console.log("Error in connecting database " + err);
    });
    
  5. ==============================

    5.

    var mydb;
    var uri = 'mongodb://localhost/user1';
    var promise = mongooose.connect(uri,{
          useMongoClient: true,
    });
    promise.openUri(uri,function(errr,db){
    if(errr){
            throw errr;
          }else{
            console.log("Connection Successfull");      
            mydb = db;
          }
    });
    

    하나는 몽구스의 최신 버전에서 약속의 도움으로 연결이 필요합니다 [1] [이 링크입니다]       [1] : http://mongoosejs.com/docs/promises.html

  6. ==============================

    6.단지 연결 () 메소드에 객체를 제 2 파라미터를 추가한다.

    단지 연결 () 메소드에 객체를 제 2 파라미터를 추가한다.

    mongoose.connect('dbUrl', {
      useMongoClient: true
    });
    

    참조 : http://mongoosejs.com/docs/connections.html#use-mongo-client

  7. ==============================

    7.이 같은 오류를 잡을 경우 :

    이 같은 오류를 잡을 경우 :

    당신은 드라이버를 사용하여 라이브러리 약속 옵션에서 세트도 필요합니다.

    mongoose.Promise = global.Promise
    mongoose.connect(uri, { useMongoClient: true, options: { promiseLibrary: mongoose.Promise }})
    
  8. ==============================

    8.

    var mongoose = require('mongoose');
    mongoose.Promise = global.Promise;
    db = mongoose.connect(env.DATABASE_URI, function(){
      //
    })
    

    나를 위해이 일.

  9. from https://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise by cc-by-sa and MIT license