mongoose
Mungo Pre und Post Middleware (Haken)
Suche…
Middleware
Middleware (auch Pre- und Post-Hooks genannt) sind Funktionen, die während der Ausführung von asynchronen Funktionen die Kontrolle übernehmen. Die Middleware wird auf Schemaebene angegeben und ist für das Schreiben von Plugins nützlich. Mongoose 4.0 verfügt über zwei Arten von Middleware: Dokumenten-Middleware und Abfrage-Middleware. Dokumenten-Middleware wird für die folgenden Dokumentfunktionen unterstützt.
- drin
- bestätigen
- sparen
- Löschen
Die Abfrage-Middleware wird für die folgenden Modell- und Abfragefunktionen unterstützt.
- Anzahl
- finden
- einen finden
- findOneAndRemove
- findOneAndUpdate
- aktualisieren
Sowohl Dokumenten-Middleware als auch Abfrage-Middleware unterstützen Vor- und Nachhaken.
Vor
Es gibt zwei Arten von Vorhaken, seriell und parallel.
Seriennummer
Serien-Middleware werden nacheinander ausgeführt, wenn jede Middleware als nächstes anruft.
var schema = new Schema(..);
schema.pre('save', function(next) {
// do stuff
next();
});
Parallel
Parallele Middleware bietet eine feinere Flusskontrolle.
var Schema = neues Schema (..);
// `true` means this is a parallel middleware. You **must** specify `true`
// as the second parameter if you want to use parallel middleware.
schema.pre('save', true, function(next, done) {
// calling next kicks off the next middleware in parallel
next();
setTimeout(done, 100);
});
Die Hook-Methode, in diesem Fall save, wird erst ausgeführt, wenn von jeder Middleware done aufgerufen wird.
Post-Middleware
Post-Middleware wird nach der Hooked-Methode ausgeführt und alle ihre Pre-Middleware sind abgeschlossen. Post-Middleware erhalten keine direkte Flusskontrolle, z. B. werden keine nächsten Callbacks weitergeleitet. Mit Post-Hooks können traditionelle Ereignis-Listener für diese Methoden registriert werden.
schema.post('init', function(doc) {
console.log('%s has been initialized from the db', doc._id);
});
schema.post('validate', function(doc) {
console.log('%s has been validated (but not saved yet)', doc._id);
});
schema.post('save', function(doc) {
console.log('%s has been saved', doc._id);
});
schema.post('remove', function(doc) {
console.log('%s has been removed', doc._id);
});