(узел: 3341) Устаревание Предупреждение: Mongoose: mpromise

Я triyng, чтобы разработать class на вершине mongoose с моими собственными методами, поэтому я расширяю мангуст с моим собственным classом, но когда я вызываю, создаю новый метод автомобиля, который он работает, но его полоса и ошибка, здесь я позволяю вам видеть, что Я пытаюсь это сделать.

Я получаю это предупреждение

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

драйвер – это пример classа драйвера

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

любые мысли о том, что я делаю неправильно?

8 Solutions collect form web for “(узел: 3341) Устаревание Предупреждение: Mongoose: mpromise”

Вот что мне удалось прояснить, прочитав документы: http://mongoosejs.com/docs/promises.html

В примере в документе используется библиотека обещаний bluebird, но я решил пойти с собственными обещаниями ES6.

В файле, где я звоню mongoose.connect :

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

[EDIT: Спасибо @SylonZero за то, что я поднял недостаток производительности в своем ответе. Поскольку этот ответ так сильно рассмотрен, я чувствую чувство долга, чтобы сделать это редактирование и поощрять использование bluebird вместо нативных обещаний. Пожалуйста, прочитайте ответ ниже этого для более образованных и опытных деталей. ]

Хотя приведенный выше ответ является точным и работает, вы должны учитывать проблему производительности, если у вас есть реальное приложение для производственного узла.

В приведенном выше решении будут использоваться собственные ES6-обещания, которые в 4 раза медленнее, чем bluebird, в тестах, которые я рассказал ниже. Это может существенно повлиять на производительность API, написанного в узле, и использование MongoDb.

Я рекомендую использовать 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
  • Intel (R) Core (TM) i7-6500U CPU @ 2,50 ГГц × 4
  • ОЗУ 16 ГБ с SSD объемом 500 ГБ

  | 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, promise которой не было переопределено - каждый запрос на эту модель выдает предупреждение.

 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

Я думаю, что у вас есть ответ, но я использую 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); }); 

Мангуст 4.8.6

Если вы поймаете ошибку следующим образом:

(node: 9600) DeprecationWarning: 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(){ // }) 

эта работа для меня.

  • Socket.io + Node.js Запрос на перекрестный запрос заблокирован
  • node.js эквивалент python, если __name__ == '__main__'
  • Выполнение запросов mongoose.js синхронно
  • Что такое Node.js 'Connect, Express и «промежуточное ПО»?
  • Socket.IO - как мне получить список подключенных сокетов / клиентов?
  • ошибка получения: «Ошибка: ошибка SSL: SELF_SIGNED_CERT_IN_CHAIN» при использовании npm
  • Mongoose: findOneAndUpdate не возвращает обновленный документ
  • Узел: войдите в файл вместо консоли
  • Запрос Mongoose / mongoDB ... но я пришел из sql-фона
  • Как установить npm в указанный каталог?
  • Индексирование Mongoose в производственном коде
  • Давайте будем гением компьютера.