docs: cleanup middleware guide, including TJ's yoda-style conditionals

changes on top of 789c30f926. closes
#158, closes #157
This commit is contained in:
Jonathan Ong 2013-12-30 22:20:32 -08:00
parent 789c30f926
commit 26f0d16644

View file

@ -118,15 +118,13 @@ function logger(format){
} }
``` ```
### Adding multiple middleware at once ### Combining multiple middleware
To add multiple middleware at once chain them together with Sometimes you want to "compose" multiple middleware into a single middleware for easy re-use or exporting. To do so, you may chain them together with `.call(this, next)`s, then return another function that yields the chain.
[.call()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)
and then return another function that yields the chain.
```js ```js
function *random(next){ function *random(next){
if (this.path == '/random') { if ('/random' == this.path) {
this.body = Math.floor(Math.random()*10); this.body = Math.floor(Math.random()*10);
} else { } else {
yield next; yield next;
@ -134,7 +132,7 @@ function *random(next){
}; };
function *backwords(next) { function *backwords(next) {
if (this.path == '/backwords') { if ('/backwords' == this.path) {
this.body = 'sdrowkcab'; this.body = 'sdrowkcab';
} else { } else {
yield next; yield next;
@ -142,18 +140,22 @@ function *backwords(next) {
} }
function *pi(next){ function *pi(next){
if (this.path == '/pi') { if ('/pi' == this.path) {
this.body = String(Math.PI); this.body = String(Math.PI);
} else { } else {
yield next; yield next;
} }
} }
app.use(function*(next){ function *all(next) {
yield random.call(this, backwords.call(this, pi.call(this, next))); yield random.call(this, backwords.call(this, pi.call(this, next)));
}); }
app.use(all);
``` ```
This is exactly what [koa-compose](https://github.com/koajs/compose) does, which Koa internally uses to create and dispatch the middleware stack.
### Response Middleware ### Response Middleware
Middleware that decide to respond to a request and wish to bypass downstream middleware may Middleware that decide to respond to a request and wish to bypass downstream middleware may