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?
Voici ce qui a fonctionné pour moi pour éclaircir le problème, après avoir lu la documentation: http://mongoosejs.com/docs/promises.html
L'exemple de la documentation utilise la bibliothèque de promesses bluebird, mais j'ai choisi les promesses natives ES6.
Dans le fichier où j'appelle mongoose.connect
:
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://10.7.0.3:27107/data/db');
[EDIT: Merci à @SylonZero pour avoir signalé un problème de performance dans ma réponse. Étant donné que cette réponse suscite un vif intérêt, je sens le devoir de faire ce montage et d’encourager l’utilisation de bluebird
au lieu de promesses autochtones. S'il vous plaît lire la réponse ci-dessous celui-ci pour plus de détails instruits et expérimentés. ]
Bien que la réponse ci-dessus soit exacte et fonctionne, vous devez prendre en compte le problème de Performance si vous avez une application Node de production réelle.
La solution ci-dessus utilisera les promesses ES6 natives - qui sont 4X plus lentes que bluebird dans les tests de performances que j'ai partagés ci-dessous. Cela pourrait affecter considérablement les performances d'une API écrite dans Node et utilisant MongoDB.
Je recommande d'utiliser 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');
Résultats de référence
Plate-forme: (utilisant le dernier nœud au moment de la rédaction)
| 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 |
avez-vous essayé ceci? 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.
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 établir 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
Si vous voyez une erreur comme ceci:
(node: 9600) DeprecationWarning: Mongoose: mpromise (la bibliothèque par défaut de mongoose promise) est obsolète. Branchez votre propre bibliothèque de promesses. au lieu de cela: http://mongoosejs.com/docs/promises.html
Vous devez également définir les options de bibliothèque de promesse à utiliser pour le pilote.
mongoose.Promise = global.Promise
mongoose.connect(uri, { useMongoClient: true, options: { promiseLibrary: mongoose.Promise }})
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
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
db = mongoose.connect(env.DATABASE_URI, function(){
//
})
cela fonctionne pour moi.
Je pense que vous avez votre réponse mais j'utilise global.promise avec traitement des erreurs
// 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);
});