Open haizhilin2013 opened 4 years ago
app.use()
,简单说其实就是把函数存放到this.middleware
数组里,然后返回实例对象this
。
koa2
中详细点,则是判断是generator函数,用koa-convert
(其实用的是co
)转换一次,再存放到this.middleware
数组里。
use(fn) {
if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');
if (isGeneratorFunction(fn)) {
deprecate('Support for generators will be removed in v3. ' +
'See the documentation for examples of how to convert old middleware ' +
'https://github.com/koajs/koa/blob/master/docs/migration.md');
fn = convert(fn);
}
debug('use %s', fn._name || fn.name || '-');
this.middleware.push(fn);
return this;
}
真正执行是app.listen
。
具体源码可以看我这篇文章。 若川:学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理
洋葱模型,会先执行第一个中间件,遇到await next执行下一个中间件,等待下一个中间件执行完毕后,再执行await next后的代码
请说说koa的app.use()执行流程
我也要出题