source

(노드:3341) 폐지 경고: Mongoose: mpromise

ittop 2023. 3. 13. 20:53
반응형

(노드:3341) 폐지 경고: Mongoose: mpromise

커스텀 메서드로 mongoose 위에 클래스를 개발하려고 합니다.그래서 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는 드라이버 클래스의 인스턴스입니다.

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

이 문서의 예에서는 Bluebird Promise 라이브러리를 사용하고 있습니다만, 저는 ES6 원어민 약속을 선택했습니다.

내가 전화한 파일에mongoose.connect:

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

[편집: @SylonZero ]님의 답변에 퍼포먼스 결함을 지적해 주셔서 감사합니다.이 답변은 매우 크게 보고 있기 때문에, 나는 이것을 편집하고 그것을 사용하도록 장려해야 한다는 의무감을 느낀다.bluebird원어민 약속 대신.보다 교육적이고 경험이 풍부한 내용은 아래의 답변을 읽어보시기 바랍니다.]

위의 답변은 정확하고 효과적이지만 실제 운영 노드 앱을 사용하는 경우 성능 문제를 고려해야 합니다.

위의 솔루션에서는 ES6의 네이티브 약속을 사용합니다.이것은 아래 벤치마크의 Bluebird보다 4배 느립니다.이는 노드에 작성되어 MongoDB를 사용하는 API의 성능에 큰 영향을 미칠 수 있습니다.

Bluebird 사용을 권장합니다.

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

벤치마크 결과

플랫폼: (쓰기 시 최신 노드 사용)

  • Linux 4.4.0-59-일반 x64
  • Node.JS 6.9.4
  • V8 5.1.281.89
  • 인텔(R) Core(TM) i7-6500U CPU @ 2.50GHz × 4
  • 16 GB RAM (500 GB SSD 탑재)

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

이거 먹어봤어?예:

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

mongoose 인스턴스에서 모델을 생성하면 해당 모델의 모든 쿼리가 경고를 발생시킵니다.

당신이 답을 가지고 있다고 생각하지만, 나는 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);
});
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;
      }
});

최신 버전의 mongoose [이것이 링크입니다][1] [1] : http://mongoosejs.com/docs/promises.html 에서의 약속의 도움으로 접속할 필요가 있습니다.

두 번째 파라미터를 오브젝트로 connect() 메서드에 추가합니다.

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

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

몽구스 4.8.6

다음과 같은 오류가 발생한 경우:

(노드:9600) 권장 해제 경고:Mongoose:mpromise(mongoose의 기본 약속 라이브러리)는 권장되지 않습니다.대신 자신의 약속 라이브러리를 연결합니다.http://mongoosejs.com/docs/promises.html

드라이버에 사용할 약속 라이브러리의 옵션도 설정해야 합니다.

mongoose.Promise = global.Promise
mongoose.connect(uri, { useMongoClient: true, options: { promiseLibrary: mongoose.Promise }})
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
db = mongoose.connect(env.DATABASE_URI, function(){
  //
})

난 이게 좋아.

언급URL : https://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise

반응형