mongoose
mangimi e middleware (ganci) di mangusta
Ricerca…
middleware
Il middleware (chiamato anche pre e post hook) sono funzioni che vengono passate al controllo durante l'esecuzione di funzioni asincrone. Il middleware è specificato a livello di schema ed è utile per scrivere plugin. Mongoose 4.0 ha 2 tipi di middleware: middleware di documenti e middleware di query. Il middleware dei documenti è supportato per le seguenti funzioni del documento.
- dentro
- convalidare
- salvare
- rimuovere
Il middleware delle query è supportato per le seguenti funzioni Modello e Query.
- contare
- trova
- trova uno
- findOneAndRemove
- findOneAndUpdate
- aggiornare
Sia il middleware documentale che il middleware delle query supportano gli hook pre e post.
Pre
Esistono due tipi di pre-aggancio, seriale e parallelo.
Seriale
Il middleware seriale viene eseguito uno dopo l'altro, quando ogni middleware chiama in seguito.
var schema = new Schema(..);
schema.pre('save', function(next) {
// do stuff
next();
});
Parallelo
Il middleware parallelo offre un controllo del flusso a grana più fine.
var schema = new 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);
});
Il metodo uncinato, in questo caso save, non verrà eseguito finché non viene chiamato done da ogni middleware.
Middleware post
i middleware post vengono eseguiti dopo il metodo hooked e tutti i relativi middleware pre completati. il middleware post non riceve direttamente il controllo di flusso, ad esempio non viene passato alcun callback successivo o fatto. post hook sono un modo per registrare i listener di eventi tradizionali per questi metodi.
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);
});