J'essaye de développer une classe sur le dessus de la mangouste avec mes méthodes personnalisées, donc j'ai étendu la mangouste avec ma propre classe mais quand j'invoque pour créer une nouvelle méthode de voiture cela fonctionne mais sa bande et son erreur, ici je vous laisse voyez 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 pensées sur ce que je fais mal?
mongoose.Promise = global.Promise
Faites simplement et vous ne devriez plus recevoir cet avertissement." github.com/Automattic/mongoose/issues/…Réponses:
Voici ce qui a fonctionné pour moi pour résoudre le problème, après avoir lu la documentation: http://mongoosejs.com/docs/promises.html
L'exemple dans la documentation utilise la bibliothèque de promesses bluebird mais j'ai choisi d'aller avec les promesses natives ES6.
Dans le fichier où j'appelle
mongoose.connect
:[EDIT: Merci à @SylonZero pour avoir soulevé une faille de performance dans ma réponse. Étant donné que cette réponse est si appréciée, je ressens le devoir de faire cette modification et d'encourager l'utilisation de
bluebird
promesses natives plutôt que natives. Veuillez lire la réponse ci-dessous celle-ci pour des détails plus instruits et expérimentés. ]la source
Bien que la réponse ci-dessus soit précise et fonctionne, vous devez tenir compte du problème des performances si vous avez une véritable application Node de production.
La solution ci-dessus utilisera les promesses ES6 natives - qui sont 4X plus lentes que bluebird dans les benchmarks 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:
Résultats de référence
Plate-forme: (en utilisant le dernier nœud au moment de la rédaction)
la source
avez-vous essayé cela? Par exemple :
si vous créez un modèle à partir d'une instance de mangouste dont la promesse n'a pas été redéfinie - chaque requête sur ce modèle lèverait l'avertissement.
la source
Je pense que vous avez votre réponse mais j'utilise global.promise avec gestion des erreurs
la source
Il faut avoir une connexion avec l'aide de la promesse dans la dernière version de mongoose [c'est le lien] [1] [1]: http://mongoosejs.com/docs/promises.html
la source
Ajoutez simplement le deuxième paramètre en tant qu'objet à la méthode connect ().
Voir: http://mongoosejs.com/docs/connections.html#use-mongo-client
la source
Mangouste 4.8.6
Si vous détectez une erreur comme celle-ci:
Vous devez également définir les options de la bibliothèque de promesse à utiliser pour le pilote.
la source
ce travail pour moi.
la source