# 其余模块做了什么
上一节我们讲到Object.create(context)
,
现在我们来看看context
,request
,response
这些模块做了什么
# context
最后导出的context
是一个Object
类型,这个类型里有一些方法,比如onerrer
,inspect
之类
这一部分除了导出的对象外,更有意思的部分是下面的delegate
,还记得我们的前置知识点一吗
这一部分的源码注释如下
delegate(proto, 'response') //当访问proto[以下属性]时,用proto.response[以下属性]回应
.method('attachment') //method表示这类属性是函数
// ...
.access('status') //access表示这类属性可以可读可写
// ...
.getter('headerSent') //getter表示这类属性只读
1
2
3
4
5
6
2
3
4
5
6
这里的意思,其实就是当我们访问proto
上面的方法或者属性,我们让proto.response
上的同名属性或方法来回应这些访问,
proto
是什么,就是我们exports
出去的那个模块,就是context
所以这一段意思就是,访问context
上面某个属性,我们用context.response
上的同名属性回应
你有没有想起来,我们在使用koa时,我们用ctx.body
,但是body
这个属性真的在ctx
上吗?
接下来,我们来看看response
这个模块
# response和request
↑ request
部分
↑ response
部分
这两张其实分别对应的就是我们访问一个网页时,request headers
和response headers
的内容
然后,聪明可爱的你应该注意到了,在第二张图中,有(get) body
,说明当我们访问ctx.body
时候,
实际上,处理属性访问的是ctx.response.body
.