Ich versuche, mit meinen benutzerdefinierten Methoden eine Klasse auf dem Mungo zu entwickeln, also habe ich den Mungo um meine eigene Klasse erweitert, aber wenn ich aufrufe, um eine neue Automethode zu erstellen, funktioniert sie, aber ihr Streifen und Fehler, hier lasse ich Sie sehen, was ich versuche zu tun.
Ich bekomme diese Warnung
(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
nachdem ich es tue
driver.createCar({
carName: 'jeep',
availableSeats: 4,
}, callback);
Treiber ist eine Instanz der Treiberklasse
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;
}
}
Irgendwelche Gedanken darüber, was ich falsch mache?
mongoose.Promise = global.Promise
und du solltest diese Warnung nicht mehr bekommen." github.com/Automattic/mongoose/issues/…Antworten:
Nach dem Lesen der Dokumente konnte ich das Problem wie folgt beheben: http://mongoosejs.com/docs/promises.html
Das Beispiel im Dokument verwendet die Bluebird-Versprechensbibliothek, aber ich habe mich für native ES6-Versprechungen entschieden.
In der Datei, in der ich anrufe
mongoose.connect
:[EDIT: Vielen Dank an @SylonZero für den Hinweis auf einen Leistungsfehler in meiner Antwort. Da diese Antwort so sehr geschätzt wird, fühle ich mich verpflichtet, diese Änderung vorzunehmen und die Verwendung von
bluebird
anstelle von einheimischen Versprechungen zu fördern . Bitte lesen Sie die Antwort unter dieser, um weitere Informationen zu erhalten. ]]quelle
Obwohl die obige Antwort korrekt ist und funktioniert, müssen Sie das Problem der Leistung berücksichtigen, wenn Sie eine echte Produktionsknoten-App haben.
Die obige Lösung verwendet native ES6-Versprechen, die in den unten angegebenen Benchmarks viermal langsamer sind als Bluebird. Dies kann die Leistung einer in Node geschriebenen API, die MongoDB verwendet, dramatisch beeinträchtigen.
Ich empfehle die Verwendung von Bluebird:
Benchmark-Ergebnisse
Plattform: (unter Verwendung des neuesten Knotens zum Zeitpunkt des Schreibens)
quelle
hast du das versucht Zum Beispiel :
Wenn Sie ein Modell aus einer Mungo-Instanz erstellen, deren Versprechen nicht neu definiert wurde, wird bei jeder Abfrage in diesem Modell die Warnung ausgegeben.
quelle
Ich denke, Sie haben Ihre Antwort, aber ich verwende global.promise bei der Fehlerbehandlung
quelle
Man muss eine Verbindung mit Hilfe von Versprechen in der neuesten Version von Mungo haben [dies ist der Link] [1] [1]: http://mongoosejs.com/docs/promises.html
quelle
Fügen Sie einfach den zweiten Parameter als Objekt zur connect () -Methode hinzu.
Siehe: http://mongoosejs.com/docs/connections.html#use-mongo-client
quelle
Mungo 4.8.6
Wenn Sie Fehler wie diesen abfangen:
Sie müssen auch Optionen festlegen, die die Verwendung der Bibliothek für den Treiber versprechen.
quelle
diese Arbeit für mich.
quelle