组合中间件
在Koa中如果要组合一组中间件,可以使用koa-compose
模块(顺便说下,Koa核心中间件模型就是由koa-compose
和co
驱动的)
例子:
app.use(compose([
rt,
response
]));
为什么要给组合的中间件命名,利好?
如果我们开启DEBUG
模式,
$ DEBUG=koa:* node --harmory app.js
我们是无法看出这个组合之后的中间件叫啥,如果中间件一多,不好跟踪,很疼
因为compose
返回的是一个匿名的GeneratorFunction
如何命名?
列举下几种方式:
- 包裹compose之后的中间件, 酒可以随意的给wapper命名了:
var fn = compose(...);
function* name(next) {
yield fn;
yield next;
}
app.use(name);
- 设置
_name
属性,因为在DEBUG
模式下,会优先检查_name
属性,具体请看https://github.com/koajs/koa/blob/master/lib/application.js#L98:
var fn = compose(...);
fn._name = 'foo';
- 使用第三方模块node-function-name,一个c++模块
(注:当前该模块的nan
还没升级到最新1.0.0,v0.11.13下编译会失败;手动把nan
升级到1.0.0,测试通过)
var set = require('function-name');
var fn = compose(...);
set(fn, 'bar');
console.log(fn.name);
完整例子 https://github.com/fundon/examples/tree/named-compose/named-compose
— END
KOA ON THE ROAD.