koa-router内部使用中间件

发布于 2022-09-11 21:51:53 字数 510 浏览 25 评论 0

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

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(),为什么在这里也能用中间件?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尘曦 2022-09-18 21:51:53

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

function middleware(ctx,next) {
 // 处理ctx
    next(); // 继续调用下一个
}
  1. 全局中间件(任何请求都会走进来)
  2. 路由中间件(匹配请求路径和请求方法才走进来)
无法言说的痛 2022-09-18 21:51:53

1.router.get可以接受多个参数,只对该路径生效。
2.app.use()中间件对所有的路径都生效。

https://www.npmjs.com/package/koa-router

一身软味 2022-09-18 21:51:53

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

router.get('/',[middleware1,middleware2,...],(ctx)=>{
  // ...
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文