# 关于use做了什么
# 函数使用部分
app.use(async (ctx,next) => {
console.log(3);
await next()
console.log(4);
})
1
2
3
4
5
2
3
4
5
# 源码部分
use(fn) {
//如果传入进来的不是一个函数,报错
if (typeof fn !== 'function') throw new TypeError('middleware must be a function!');
//如果这个函数是用generator的,不是用async的函数,警告,并将该函数转换成async的样子
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);
}
// 可以运行package.json里面的命令,运行一下,看看效果
// "debug_windows": "set DEBUG=koa:application & node ./app.js",
// "debug_linux": "DEBUG=koa:application node ./app.js"
debug('use %s', fn._name || fn.name || '-');
this.middleware.push(fn); //将中间件推入middleware这个数组里
return this; //返回this,方便链式调用
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
可以看见,use里面最主要的部分
就是在前置知识点二说过的那样,把传入来的函数,
放入到middleware
中,方便后面对这个数组里面的子项进行递归调用.
熟悉koa的小伙伴应该知道,接下来,我们只需要listen(port)
就可以启动整个项目了,那么,最后一步,让我们来看看listen
做了什么
← 其余模块做了什么 关于listen做了什么 →