Cal*_*mer 9 streaming request node.js hapijs
我正在尝试使用流来使用Hapi将数据发送到浏览器,但无法确定如何使用.具体来说,我正在使用请求模块.根据文档,reply对象接受一个流,所以我尝试过:
reply(request.get('https://google.com'));
Run Code Online (Sandbox Code Playgroud)
抛出错误.在文档中它说流对象必须与streams2兼容,所以我尝试了:
reply(streams2(request.get('https://google.com')));
Run Code Online (Sandbox Code Playgroud)
现在这不会引发服务器端错误,但在浏览器中请求永远不会加载(使用chrome).
然后我尝试了这个:
var stream = request.get('https://google.com');
stream.on('data', data => console.log(data));
reply(streams2(stream));
Run Code Online (Sandbox Code Playgroud)
并且在控制台中输出数据,所以我知道流不是问题,而是Hapi.我怎样才能在Hapi中获得流媒体工作?
arb*_*arb 15
尝试使用Readable.wrap:
var Readable = require('stream').Readable;
...
function (request, reply) {
var s = Request('http://www.google.com');
reply(new Readable().wrap(s));
}
Run Code Online (Sandbox Code Playgroud)
使用Node 0.10.x和hapi 8.xx进行测试在我的代码示例中Request是节点请求模块,request它是传入的hapi请求对象.
UPDATE
另一种可能的解决办法是监听"响应"事件从Request然后reply用http.IncomingMessage这是一个适当的读操作流.
function (request, reply) {
Request('http://www.google.com')
.on('response', function (response) {
reply(response);
});
}
Run Code Online (Sandbox Code Playgroud)
这需要更少的步骤,并且还允许开发人员在传输之前将用户定义的属性附加到流.这在设置200以外的状态代码时非常有用.