Javascript node.js http.request有时会获取损坏的数据

Javascript node.js http.request有时会获取损坏的数据,javascript,node.js,curl,Javascript,Node.js,Curl,我使用http.request卷曲一个网页,这是我的代码 var curlUtil=function(option,callback){ var bufferHelper = new BufferHelper(); console.log(option); var data=''; var req=http.request(option,function(res){ if(res.statusCode==301||res.statusCod

我使用http.request卷曲一个网页,这是我的代码

var curlUtil=function(option,callback){
    var bufferHelper = new BufferHelper();
    console.log(option);
    var data='';
    var req=http.request(option,function(res){
            if(res.statusCode==301||res.statusCode==302){
              var link=res.headers.location;
              console.log('redirect:'+link);
              curlUtil(link,function(data){
                callback(data);
              });
              return;
            }
            res.on('data',function(chunk){
                    bufferHelper.concat(chunk);
            });
            res.on('end',function(){
                    var data=bufferHelper.toBuffer().toString();
                    callback(data);
            });
    });
    req.end();
};
有时它工作得很好,但有时它会得到损坏的数据,
req.on('end')。我不知道这是怎么发生的,但它确实发生了,谁能告诉我该怎么办

var curlUtil=function(option,callback){
    var bufferHelper = new BufferHelper();
    console.log(option);
    var data='';
    var req=http.request(option,function(res){
            if(res.statusCode==301||res.statusCode==302){
              var link=res.headers.location;
              console.log('redirect:'+link);
              curlUtil(link,function(data){
                callback(data);
              });
              return;
            }
            res.on('data',function(chunk){
                    bufferHelper.concat(chunk);
            });
            res.on('end',function(){
                    var data=bufferHelper.toBuffer().toString();
                    callback(data);
            });
    });
    // req.end(); 
};

req.end()将触发“end”事件。即使数据正在转换

以识别超时,也可以尝试这样做:

req.on('socket', function (socket) {
  socket.on('timeout', function() {
    console.log('Timed out');
    req.abort();
  });
}
如果确认这是超时,则可以增加此值:

req.on('socket', function (socket) {
  socket.setTimeout(60000);  
  socket.on('timeout', function() {
    req.abort();
  });
}

我阅读了nodejs api(示例
注意,在示例中调用了req.end()。使用http.request()时,必须始终调用req.end(),以表示您已完成请求-即使没有数据写入请求正文。
我必须调用.end()方法,否则它将始终请求。您所说的断开数据是什么意思?您能给我们展示一个
选项
对象的示例吗?请确保这不是一个超时情况,如下所述:我请求此页面。有时我只获取html的一部分。