Fer*_*bus 5 javascript node.js
我正在node.js中构建一个应用程序,它会加载几页来分析内容.
因为node.js发送块我可以分析块.如果一个块包含例如index,nofollow我想关闭该连接并继续其余部分.
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);
});
Run Code Online (Sandbox Code Playgroud)
我唯一想不通的是退出那个连接.或者因为我不需要它而停止检索数据..
req.end(); 不起作用..它继续检索数据/块...(在我的测试中我得到14个块,但在第一个块我已经知道我不需要其他块,所以我想要退出请求/响应).
我现在有一个跳过分析其他块的布尔值,但在我看来,我最好跳过检索数据?
要叫什么功能?或者它是不可能的,因为它需要检索一切?
我还没有测试过,把它放在你的else块中应该可以工作:res.removeAllListeners('data');
基本上你res是 Object 的孩子EventEmitter。通过调用removeAllListeners('data')它,所有绑定到data事件的处理程序都将被删除,并且回调将不再执行。但您仍然需要等待所有数据事件通过end,或者error根据请求发出事件。
另请阅读 nodejs EventEmitter 文档以获取更多信息。
您不妨尝试在 else 块中的对象上发出end或close事件res,如下所示:res.emit('end');或res.emit('close');。事件的clientRespone对象的文档end说它是
每个响应只发出一次。之后,响应中将不再发出“数据”事件。