mongoose
mongoose pre- och postgods (krokar)
Sök…
middle~~POS=TRUNC
Middleware (även kallad pre- och post hooks) är funktioner som skickas kontroll under utförande av asynkrona funktioner. Middleware anges på schemanivå och är användbart för att skriva plugins. Mongoose 4.0 har två typer av mellanprogram: dokument mellanprogram och fråga mellanprogram. Dokument mellanprogram stöds för följande dokumentfunktioner.
- i det
- bekräfta
- spara
- ta bort
Frågestormware stöds för följande modell- och frågefunktioner.
- räkna
- hitta
- hitta en
- findOneAndRemove
- findOneAndUpdate
- uppdatering
Både dokument middleware och query middleware stöder pre- och postkrokar.
pre
Det finns två typer av förkrokar, seriella och parallella.
Serie
Seriell mellanprogram exekveras efter varandra när varje mellanprogram anropar nästa.
var schema = new Schema(..);
schema.pre('save', function(next) {
// do stuff
next();
});
Parallell
Parallell medelvara erbjuder mer finkornig flödeskontroll.
var schema = nytt 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);
});
Den anknutna metoden, i detta fall spara, kommer inte att köras förrän det är klart för varje mellanprogram.
Skicka mellanvaror
post middleware körs efter den anslutna metoden och alla dess pre-middleware har slutförts. post middleware får inte direkt flödeskontroll, t.ex. skickas inga nästa eller gjort återuppringningar till det. postkrokar är ett sätt att registrera traditionella evenemangslyssnare för dessa metoder.
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);
});