89 votes

(node: 3341) DeprecationWarning: Mongoose: mpromise

J'essaie de développer une classe sur le dessus de la mangouste avec mes méthodes personnalisées, alors j'ai étendu la mangouste avec ma propre classe, mais lorsque j'invoque pour créer une nouvelle méthode de voiture, cela fonctionne, mais sa bande et erreur, ici je vous laisse vois ce que j'essaye de faire.

Je reçois cet avertissement

 (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
 

après je fais

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

driver est une instance de la classe 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;
 }
}
 

des idées sur ce que je fais mal?

240voto

Hunter Lester Points 2604

Voici ce qui a fonctionné pour moi d'éclaircir la question, après la lecture de docs: http://mongoosejs.com/docs/promises.html

L'exemple de la doc est à l'aide de la bluebird promesse de la bibliothèque, mais j'ai choisi d'aller avec native ES6 promesses.

Dans le fichier où je suis appelant mongoose.connect:

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

[EDIT: Merci à @SylonZero pour mettre en place un rendement faille dans ma réponse. Depuis cette réponse, c'est tellement vu, je ressens un sentiment de devoir à faire de cette édition et pour encourager l'utilisation de l' bluebird au lieu de natif de promesses. Veuillez lire la réponse en dessous pour plus instruits et expérimentés de détails. ]

72voto

SylonZero Points 1027

Si la réponse ci-dessus sont exacts et travaux, vous avez pour tenir compte de la question de la Performance si vous avez un vrai, la production Nœud de l'application.

La solution ci-dessus sera natif ES6 promesses - qui sont 4X plus lente que bluebird dans les benchmarks que j'ai partagée ci-dessous. Cela pourrait considérablement affecter la performance d'une API écrite en Nœud et l'utilisation de MongoDB.

Je recommande l'utilisation de 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');

Les Résultats D'Un Benchmark

Plate-forme: (en utilisant les dernières Nœud au moment de la rédaction)

  • Linux 4.4.0-59-générique x64
  • Node.JS 6.9.4
  • V8 5.1.281.89
  • Intel(R) Core(TM) i7-6500U CPU @ 2.50 GHz × 4
  • 16 GO de RAM 500 GO de 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     |

2voto

avez-vous essayé cela? Par exemple :

 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
 

si vous créez un modèle à partir d'une instance mangouste dont la promesse n'a pas été redéfinie, chaque requête de ce modèle génère l'avertissement.

1voto

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

Il faut avoir une connexion avec l'aide de promise dans la dernière version de mangouste [c'est le lien] [1] [1]: http://mongoosejs.com/docs/promises.html

0voto

Aaman Points 9

Ajoutez simplement le second paramètre sous forme d'objet à la méthode connect ().

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X