mongoose
Version:
Mongoose MongoDB ODM
72 lines (67 loc) • 1.98 kB
text/jade
extends layout
block content
h2 Middleware
p
| Middleware are functions which are passed control of flow during execution of
a(href="./api.html#document_Document-init") init
|,
a(href="./api.html#document_Document-validate") validate
|,
a(href="./api.html#model_Model-save") save
| and
a(href="./api.html#model_Model-remove") remove
| methods.
p
| There are two types of middleware, serial and parallel.
h4 Serial
p
| Serial middleware are executed one after another, when each middleware calls
code next
:js
var schema = new Schema(..);
schema.pre('save', function (next) {
// do stuff
next();
});
h4 Parallel
p
| Parallel middleware offer more fine-grained flow control.
:js
var schema = new Schema(..);
schema.pre('save', true, function (next, done) {
// calling next kicks off the next middleware in parallel
next();
doAsync(done);
});
p
| The hooked method, in this case
code save
|, will not be executed until
code done
| is called by each middleware.
h4 Use Cases
p
| Middleware are useful for atomizing model logic and avoiding nested blocks of async code. Here are some other ideas:
ul
li complex validation
li
| removing dependent documents
ul
li (removing a user removes all his blogposts)
li asynchronous defaults
li asynchronous tasks that a certain action triggers
ul
li triggering custom events
li notifications
h4 Error handling
:markdown
If any middleware calls `next` or `done` with an `Error` instance, the flow is interrupted, and the error is passed to the callback.
:js
schema.pre('save', function (next) {
var err = new Error('something went wrong');
next(err);
});
// later...
myModel.save(function (err) {
console.log(err.message) // something went wrong
});