如何在hapi.js中将流传输到回复中

10

我正在寻找hapi中的parallel方法

// Express + Request exmaple
function(req, res){
  request('http://example.com/image.png').pipe(res);
}

如何在 hapi 中使用管道处理响应?

server.route({
method:  "*",
path:    "/api/results/{date}",
handler: (request, reply) => {


    //????reply(?);



}
});  

我不确定你是否可以。请求是否支持streams2 API?根据hapi文档:流对象(注意 - 任何流对象必须与“streams2”API兼容,且不能处于objectMode模式) http://hapijs.com/api#reply-interface - Clarkie
1
我已经使用aws-sdk模块完成了它:reply(s3.getObject(params).createReadStream()); - Clarkie
server.route({ method: "*", path: "/api/results/{date}", handler: (req, reply) => { var fs = require('fs'); var fileStream = fs.createWriteStream('./doron'); request('http://google.com/doodle.png').pipe(fileStream); reply(fileStream); } }); 这会抛出以下异常 Debug: internal, implementation, error Error: Stream 必须具有 streams2 可读接口 - doron aviguy
这就是我看到的,所以我说我不认为请求模块支持streams2。你可以尝试https://www.npmjs.com/package/wreck,但我不确定那是否有效。 - Clarkie
1
好的,我会研究一下 wreck。我现在遇到的问题是 request 模块不支持 streams2。我的观点是,hapi 应该支持并鼓励人们使用 streams。经过我的调查,我发现关于 hapi 中对 streams 的支持文档不够充分。 - doron aviguy
2个回答

7

2
这些不使用流的能力。流很简单。on('data',...侦听器在每个数据事件上发出事件。你发布的答案基本上是监听结束事件。 - doron aviguy
1
@doronaviguy 你错了。响应是一个流,事件在头部处理完后立即被触发。 - Gil
1
@Gil 谢谢,你说得对。'response' 事件是 http.IncomingMessage ,它是一个流对象。 引用自 http 模块文档 http.IncomingMessage: 它实现了可读流接口 - doron aviguy

2

如果您只需要转发上游响应,可以通过h2o2插件使用代理处理程序:

server.route({
    method: 'GET',
    path: '/upstream/file',
    handler: {
        proxy: {
            uri: 'http://example.com/image.png'
        }
    }
});

哪些方法处理流响应? - pery mimon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接