koa源码分析(四) - response.js
brunoyang opened this issue · 0 comments
本文分为四个部分,分别对应源码的四个文件。
- koa源码分析(一) - application.js
- koa源码分析(二) - context
- koa源码分析(三) - request.js
- koa源码分析(四) - response.js
- koa源码分析(五) - koa 2.0
依赖
大多数在之前有介绍到过,这里只讲之前没讲到的
- vary: 用于设置vary字段
源码分析
首先,推荐大家去看http roc文档,这还是中文版的,不用怕看不懂。作为前端工程师,又跟node打交道,http知识是必不可少的,有兴趣的还应该再去了解TCP/IP协议,了解一点后就会对网络通信有比较深入的了解了,推荐一个大部头,《TCP-IP详解》,内容很多,调重要的看,绝对能学到很多。
照例,有些一眼看得懂的我又不讲啦。
set body
响应体(body)若为空,设状态码为204,并将Content-Type,Content-Length,Transfer-Encoding移除掉,因为这三个字段在body有值时才会被设置。
接着内容是不是由‘<’打头的字符串,若是的话就肯定是个html,若不是的话,就是个单纯的文本。
再判断是否为一个buffer也就是二进制文件,图片视频那些东西在传输时全是二进制,所以就不做啥操作,设置个length就行了。
然后看是否是stream,依据是是否有pipe这个函数,这个函数就跟管道符一样,用于传输数据,然后我就不太懂了。
最后就认为body是个json, json没有length
redirect
用法:
this.redirect('back');
this.redirect('back', '/index.html');
this.redirect('/login');
this.redirect('http://google.com');
若第一个参数为back,该方法将从referrer中取值或取第二个参数,没有就直接跳'/'。接着在看req中的accept是什么值,要是个html的话,body是个链接,若不是的话,直接返回串字符就行了。