Javascript Node.js:如何在检索数据时关闭响应/请求(chuncks)
我正在node.js中构建一个应用程序,它会加载几个页面并分析内容 因为node.js发送块,所以我可以分析块。如果一个块包含例如索引,我想关闭这个连接,然后继续其他的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
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
事件之后不会触发任何数据
事件。