16

我正在使用https.requestin node.js请求远程文件。我对接收整个文件不感兴趣,我只想要第一个块中的内容。

var req = https.request(options, function (res) {
    res.setEncoding('utf8');

    res.on('data', function (d) {
         console.log(d);
         res.pause(); // I want this to end instead of pausing
    });
});

我想在第一个块之后完全停止接收响应,但我没有看到任何关闭或结束方法,只有暂停和恢复。我担心使用 pause 是对该响应的引用将无限期地徘徊。

有任何想法吗?

4

1 回答 1

16

在文件中弹出它并运行它。如果您看到来自 google 的 301 重定向答案(我相信它是作为单个块发送的),您可能必须适应您的本地 google。

var http = require('http');

var req = http.get("http://www.google.co.za/", function(res) {
  res.setEncoding();
  res.on('data', function(chunk) {
    console.log(chunk.length);
    res.destroy(); //After one run, uncomment this.
  });
});

要查看它res.destroy()确实有效,请取消注释它,并且响应对象将继续发出事件,直到它自己关闭(此时节点将退出此脚本)。

我也尝试过用res.emit('end');代替destroy(),但在我的一次测试运行期间,它仍然触发了一些额外的块回调。destroy()似乎是一个更迫在眉睫的“终结”。

销毁方法的文档在这里:http ://nodejs.org/api/stream.html#stream_stream_destroy

但是你应该从这里开始阅读:http ://nodejs.org/api/http.html#http_http_clientresponse (它声明响应对象实现了可读流接口。)

于 2012-08-01T23:27:39.680 回答