koa-router内部使用中间件

之前定义路由一般是这么用的:

router.get('/',function(ctx,next){
    ctx.body='hello hello';
})

最近看到了一种用法,在方法参数中加入了一个中间件:

router.get(
  '/',
  (ctx, next) => {
    return User.findOne(ctx.params.id).then(function(user) {
      ctx.user = user;
      next();
    });
  },
  ctx => {
    console.log(ctx.user);
    // => { id: 17, name: "Alex" }
  }
);

为什么能这样用, 难道说router.get的方法定义不是死的吗?如何做到中间可以支持中间件的吗?

另外中间件的注册不是一般都是app.use(),为什么在这里也能用中间件?

阅读 7.3k
3 个回答

只要正确处理好ctx就行了。koa中间件不是什么神奇的东西,说白了就是下面这个函数

function middleware(ctx,next) {
 // 处理ctx
    next(); // 继续调用下一个
}
  1. 全局中间件(任何请求都会走进来)
  2. 路由中间件(匹配请求路径和请求方法才走进来)

中间件,分全局中间件和局部中间件。
app.use() 这是全局的,单个路由使用可以理解为局部的,而且局部还可以这样写

router.get('/',[middleware1,middleware2,...],(ctx)=>{
  // ...
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题