【问题标题】:Convert node.js HTTP response function (using "request" library) to use streams将 node.js HTTP 响应函数(使用“请求”库)转换为使用流
【发布时间】:2015-12-17 04:35:30
【问题描述】:

我在 node.js 中使用request library,它会下载 HTML 正文响应,但会分块下载。目前我只是将它们连接到一个dataChunks 变量中,并使用一个被破解的测试来查看它何时全部下载。但是,我已经略读了Stream Handbook,这似乎是一种使用流来获取数据块的情况。不过,我并不完全理解我将如何做到这一点,因此将不胜感激。相关代码如下:

var dataChunks = "";

request.get({ url: baseUrl + path })
            .on("error", function(err) { throw new Error(err); })
            .on("response", function(res) {
                if (res.statusCode === 200) {
                    res.on("data", function(data) {
                        var dataString, dt;

                        dataChunks += (dataString = data.toString());

                        if ((dt = dataString.slice(-100).trimRight()).lastIndexOf("</html>") === dt.length - 7) {
                            // do stuff with dataChunks
                        }
                    });
                }
            });

提前感谢您的帮助。

【问题讨论】:

    标签: javascript node.js stream httprequest


    【解决方案1】:

    你不需要一个流。来自请求自述文件:

    var request = require('request');
    request('http://www.google.com', function (error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log(body) // Show the HTML for the Google homepage.
     } 
    })
    

    流示例:

    request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))
    

    【讨论】:

    • 好的,我知道我可以这样做并且一次收到所有响应(这将是最简单的),但是当数据进入时流式传输数据没有优势吗?或者,如果您想单独使用/显示这些块,是否会有优势?
    • 请参见第二个流示例。有一些优点,但不仅仅是检索普通页面的正文以显示在控制台中。按照示例流式传输到文件可能是一个优势,特别是如果它是一个大文件。
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多