2015-07-03 79 views
7

我试图使用流向Hapi发送数据到浏览器的数据,但无法确定我们的方式。具体来说,我使用的是request模块。根据文档reply对象接受流,所以我试过:如何使用Hapi将数据流式传输到浏览器?

reply(request.get('https://google.com')); 

引发错误。在文档它说的流对象必须与streams2兼容,所以后来我想:

reply(streams2(request.get('https://google.com'))); 

现在,这并不抛出一个服务器方的错误,但在浏览器的请求从不负载(使用Chrome)。

然后我尝试这样做:

var stream = request.get('https://google.com'); 
stream.on('data', data => console.log(data)); 
reply(streams2(stream)); 

并在控制台数据输出,所以我知道流不是问题,而是哈皮。我如何才能在Hapi中进行流式传输?

回答

12

尝试使用Readable.wrap

var Readable = require('stream').Readable; 
... 
function (request, reply) { 

    var s = Request('http://www.google.com'); 
    reply(new Readable().wrap(s)); 
} 

使用节点0.10.x和HAPI 8.x.x.测试在我的代码示例中,Request是节点请求模块,而request是传入的hapi请求对象。

UPDATE

另一种可能的解决办法是监听'response' eventRequest然后replyhttp.IncomingMessage这是一个适当的读操作流。

function (request, reply) { 

    Request('http://www.google.com') 
    .on('response', function (response) { 
     reply(response); 
    }); 
} 

这需要较少的步骤,并且还允许开发者传输之前用户定义的属性附加到流。这可以用于设置除200以外的状态代码。

相关问题