KOA 每日一问 中间件的执行顺序和定义顺序。
发布于 9 年前 作者 rover5056 7085 次预览 最后一次回复是 9 年前 来自 问答
两个问题。
1.在KOA 里,中间件之间除了执行顺序之外,有参数之间的联系吗。
比如上一个中间件在next 时给下一个中间件传递参数。
还是说不能传参数。
2.现在我在post的请求时取到了参数,然后我准备处理一些数据。但是写到一个func 里感觉不好管理。所以我想把处理的逻辑放在另一个func中。现在问题来了:
必须用另一个另一个generator函数了,直接用普通的func就可以?如果要挂载另一个generator,用router.use还是?从第一个yeild指向新的func时,参数怎么传递
10 回复
还有一个问题是 next 指向的顺序是 根据use注册的顺序吗(先写先执行?) 还是其他的判断逻辑? 为什么在这里的输出顺序是“00”>“5566”>'01’ use 的逻辑提前在.post之前了?
参数绑定到
this上呗为什么在这里的输出顺序是“00”>“5566”>'01’ ? 回答你这个问题。看源码注释就知道了
Router.prototype[method] Router.prototype.use 他们同时调用了 router.register这个方法。你可以看内部实现
@KingTree
如果我想控制它的执行流程。先走post的方法 ,然后再接着执行后面挂载的方法。。该怎么写,求指导
@rover5056 虽然不知道你要做什么。不过通过 中间件 middleware 可以
你需要了解,koa 中间件机制,是剥洋葱的顺序就行了。 -> 3 -> 2 -> 1 -> 0 -> 1 -> 2 ->3
@KingTree 我的意思就是,我怎么样能够定义 router.post 为1. router.use为2.
我怎么样能够知道我定义的中间件是第几个执行。
@rover5056
但是你这样写很怪。路由只做路由的事情,干嘛要做中间件的事情呢?
@KingTree 额 不是用路由做中间件的事,是路由判断完成拿到参数然后怎样控制它继续执行对应的中间件。 比如
是想指定对应路由之后的对应的方法。。。
@rover5056
中间件是所有请求都会路过的。
服务启动就会加载所有中间件,所以不可能动态加载中间件的。
@rover5056 你只是想路由匹配的时候执行对应的方法吧,加个model层呗,建议你看下狼叔的rest的文章,里面有详细介绍。