给组合的中间件命名,In Koa
发布于 11 年前 作者 fundon 5439 次浏览 最后一次编辑是 8 年前

组合中间件

在Koa中如果要组合一组中间件,可以使用koa-compose模块(顺便说下,Koa核心中间件模型就是由koa-composeco驱动的)

例子:

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.

2 回复

node-function-name 作者已更新nan到1.0.0 写了个小模块 https://github.com/fundon/composedly

回到顶部