【问题标题】:node.js write http response to streamnode.js 将 http 响应写入流
【发布时间】:2012-08-08 00:33:38
【问题描述】:

我正在通过 http 获取一些二进制数据。我的代码如下:

var writeStream = fs.createWriteStream(fileName);
request(url, function(err, res) {
    res.socket.pipe(writeStream);
});

现在输出文件已创建,但文件大小为 0。不过,url 是正确的,我用 wget 验证了这一点。

提前致谢并致以最诚挚的问候

【问题讨论】:

    标签: javascript http node.js stream request


    【解决方案1】:

    http.request 的回调仅提供一个参数,即对请求的response 的引用。试试

    http.request(url, function(res) {
        res.pipe(writeStream);
    });
    

    还要注意ClientResponse 实现ReadableStream,因此您应该使用.pipe 而不是.socket.pipe

    【讨论】:

    • const req = http.request... 然后req.end() 以使其工作
    • 管道非常慢
    【解决方案2】:

    我假设这里的 request 来自 mikeal 的请求库,而不是 http.request 的实例。在这种情况下,你可以简单地做request(url).pipe(writeStream);

    请记住,出于调试目的,您始终可以通过管道发送到 process.stdout

    【讨论】:

    • 如果您使用的是node core https库,而不是您提到的库,有什么区别?
    【解决方案3】:

    var readStream = fs.createReadStream(fileName);
    request(url, function(err, res) {
      readStream.pipe(res);
      readStream.on('end', function() {
        //res.end({"status":"Completed"});
      });
    });

    【讨论】:

    • 您只能将可读的管道传输到可写的管道,而不是像您建议的那样相反。
    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 2018-07-08
    • 2011-08-15
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多