两个问题。 1.在KOA 里,中间件之间除了执行顺序之外,有参数之间的联系吗。 比如上一个中间件在next 时给下一个中间件传递参数。 还是说不能传参数。 2.现在我在post的请求时取到了参数,然后我准备处理一些数据。但是写到一个func 里感觉不好管理。所以我想把处理的逻辑放在另一个func中。现在问题来了: 必须用另一个另一个generator函数了,直接用普通的func就可以?如果要挂载另一个generator,用router.use还是?从第一个yeild指向新的func时,参数怎么传递
还有一个问题是 next 指向的顺序是 根据use注册的顺序吗(先写先执行?) 还是其他的判断逻辑? 为什么在这里的输出顺序是“00”>“5566”>'01’ use 的逻辑提前在.post之前了?
参数绑定到this
上呗
为什么在这里的输出顺序是“00”>“5566”>'01’ ? 回答你这个问题。看源码注释就知道了
/**
* Use given middleware(s) before route callback.
*
* Only runs if any route is matched. If a path is given, the middleware will
* run for any routes that include that path.
*
* @example
*
* ```javascript
* router.use(session(), authorize());
*
* // use middleware only with given path
* router.use('/users', userAuth());
*
* app.use(router.routes());
* ```
*
* @param {String=} path
* @param {Function} middleware
* @param {Function=} ...
* @returns {Router}
*/
Router.prototype[method] Router.prototype.use 他们同时调用了 router.register这个方法。你可以看内部实现
如果我想控制它的执行流程。先走post的方法 ,然后再接着执行后面挂载的方法。。该怎么写,求指导
@rover5056 虽然不知道你要做什么。不过通过 中间件 middleware 可以
你需要了解,koa 中间件机制,是剥洋葱的顺序就行了。 -> 3 -> 2 -> 1 -> 0 -> 1 -> 2 ->3
@KingTree
我的意思就是,我怎么样能够定义 router.post 为1. router.use为2.
我怎么样能够知道我定义的中间件是第几个执行。
router.use(function * (next){
yield next;
//这里写你想做的事情
});
但是你这样写很怪。路由只做路由的事情,干嘛要做中间件的事情呢?
@KingTree 额 不是用路由做中间件的事,是路由判断完成拿到参数然后怎样控制它继续执行对应的中间件。 比如
router.post(’/’,function*(){ … yield next 1; //执行a方法 ) router.get(’/’,function*(){ … yield next 2; //执行b方法 )
是想指定对应路由之后的对应的方法。。。
@rover5056 你只是想路由匹配的时候执行对应的方法吧,加个model层呗,建议你看下狼叔的rest的文章,里面有详细介绍。