猿问

koa是如何处理body

看图,我用是request库,而request请求github的接口,然后设置给ctx.body,这里,我有个疑问,request不是异步的吗?为什么这里就可以直接赋值给ctx.body呢?而且这样写,你调用接口,确实能正确返回结果。

https://img2.mukewang.com/5c837a8800013bba08000598.jpg

大话西游666
浏览 925回答 2
2回答

翻过高山走不出你

这里能顺利返回,有运气成分在里面,不建议这样使用。为什么能成功首先,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,也可以采用官方的版本。

慕莱坞森

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

相关分类

JavaScript
我要回答