node.js http.request有时会破坏数据

时间:2013-12-24 12:55:31

标签: 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.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');。我不知道这是怎么发生的,但确实发生过,任何能告诉我应该怎么做的人都会这样做?

2 个答案:

答案 0 :(得分:0)

要识别超时,请尝试执行以下操作:

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();
  });
}

答案 1 :(得分:-1)

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()将触发“结束”事件。即使数据正在翻译