Javascript Node.js:如何在检索数据时关闭响应/请求(chuncks)

Javascript Node.js:如何在检索数据时关闭响应/请求(chuncks),javascript,node.js,Javascript,Node.js,我正在node.js中构建一个应用程序,它会加载几个页面并分析内容 因为node.js发送块,所以我可以分析块。如果一个块包含例如索引,我想关闭这个连接,然后继续其他的 var host = 'example.com', total = '', http = require('http'); var req = http.request({hostname: host, port: 80, path: '/'}, function(res) { res.on('da

我正在node.js中构建一个应用程序,它会加载几个页面并分析内容

因为node.js发送块,所以我可以分析块。如果一个块包含例如索引,我想关闭这个连接,然后继续其他的

var host  = 'example.com',
    total = '',
    http  = require('http');

var req = http.request({hostname: host, port: 80, path: '/'}, function(res) {
    res.on('data', function(chunk) {
        total += chunk;
        if(chunk.toString().indexOf('index,nofollow') == -1) {
            // do stuff
        } else {
            /*
             * WHAT TO DO HERE???
             * how to close this res/req?
             * close this request (goto res.end or req.end????
             */
        }
    }).on('end', function() {
        // do stuff
    });
}).on('error', function(e) {
    // do stuff
    console.log("Got error: " + e.message);
});
我唯一搞不清楚的是退出连接。或者停止检索数据,因为我不需要它

请求结束();不起作用。。它继续检索数据/块。。 (在我的测试中,我得到了14个区块,但在第一个区块,我已经知道我不需要其他区块,所以我想退出请求/响应)

我现在有了一个布尔值,它跳过了对其他块的分析,但在我看来,跳过检索数据更好吗


调用什么函数?还是因为它需要检索所有内容而不可能呢?

我还没有对它进行测试,将它放入
else
块应该可以工作:
res.removeAllListeners('data')

基本上,您的
res
EventEmitter
对象的子对象。通过对其调用
removeAllListeners('data')
,所有绑定到
data
事件的处理程序都将被删除,回调将不再执行。但在请求发出
end
error
事件之前,您仍必须等待所有数据事件通过

也可以阅读nodejs了解更多信息

更新: 您还可以尝试在else块中的
res
对象上发出
end
close
事件,如下所示:
res.emit('end')
res.emit('close')
end
事件的对象表示它是

每个响应只发出一次。在此之后,响应上将不再发出“数据”事件


谢谢!它就像一个符咒。我会分析这些问题,所以如果不需要分析,我想跳过它。任务完成了!我会深入了解事件发射器和听众,甚至更好。这就是我所尝试的,只是走错了路。我试过res.end()。但这会崩溃。res.emit('end')起作用。它只读第一首春歌,然后一直读到结尾。。此外,还没有读到春卷。顺便说一句,另一个选项也有效。但是我将坚持使用emit.Right,只有当您是服务器时,才可以
结束
响应对象。换句话说,您只能
end
一个
ServerResponse
。在
http.request
回调中收到的
response
对象是
ClientResponse
对象。您只能侦听
end
事件,而不能对对象本身调用
end()
。但是,作为一个
EventEmitter
我们可以发出
end
事件,并欺骗对象相信
response
已经结束,而实际上,服务器可能仍在发送响应,在
end
事件之后不会触发任何
数据
事件。