为了账号安全,请及时绑定邮箱和手机立即绑定

koa是如何处理body

koa是如何处理body

大话西游666 2019-03-06 16:23:40
看图,我用是request库,而request请求github的接口,然后设置给ctx.body,这里,我有个疑问,request不是异步的吗?为什么这里就可以直接赋值给ctx.body呢?而且这样写,你调用接口,确实能正确返回结果。
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

这里能顺利返回,有运气成分在里面,不建议这样使用。


为什么能成功

首先,request(xxx)返回的是个Stream实例


var request = require('request');

var re = request('xxx'); // 替换成实际资源

console.log( body instanceof Stream ); // 打印 true

然后,当ctx.body是Stream实例时,koa做了特殊处理,采用了pipe,因此虽然request(xx)是异步的,但还是能成功返回的原因。


if (body instanceof Stream) return body.pipe(res); // koa的源代码

更好的姿势

用await asyncFn() 来获取结果,可以自己封装这里的asyncFn,也可以采用官方的版本。


查看完整回答
1 反对 回复 2019-03-09
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

正确返回结果是什么意思
request返回的是个Request对象而不是接口的返回值吧,如果你没对request做任何处理,你的data应该是个有'_tunnel', 'headers', 'setHeader', 'hasHeader', 'getHeader',这些属性的Request对象。

查看完整回答
反对 回复 2019-03-09
  • 2 回答
  • 0 关注
  • 924 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号