“管道中未处理的流错误” - Node.js / request中的文件下载过多?

时间:2014-05-20 05:35:35

标签: node.js request

我正在尝试使用Node(特别是请求模块)从JSON提要下载许多(大约2,000个)图像。当我尝试这样做(循环通过JSON)时,我得到了

throw er; // Unhandled stream error in pipe.

我检查ulimit -n并将其设置为256,所以我将其增加到4,000并且我仍然得到相同的错误(尽管在下载更多图像后)。

我有两个问题,

  1. 如果我提出的最大下载数量超过我实际拥有的同时下载数量,为什么我仍然会收到错误

  2. "排队"最好的方法是什么?或暂停下载,以免压倒我的系统?这是我的代码。

  3. var fs = require('fs') , http = require('http') , request = require('request') , url = 'http://www.urlOfJsonFeed'

    function get(){
        http.get(url, function(res) {
            var body = '';
            res.on('data', function(chunk) {    
                body += chunk;
            });
            res.on('end', function() {
                jParse(body);
            });
        }).on('error', function(e) {
              console.log("Got error: ", e);
        });
    }
    
    function jParse(info){
        data = JSON.parse(info)
        entries = data.entries
        numToDownload = entries.length;     
        for(var i = numToDownload - 1; i >= 0; i -= 1){
            link = entries[i]['imgUrl']
            download(link, 'images/' + mov + '.mp4', function(){
                console.log('Downloaded  ' + dMov + ' movies')
                dMov++
            }
        }
    }
    
    
    var download = function(uri, filename, callback){
      request.head(uri, function(err, res, body){
        if (err) {
            console.log('header error');
        }
        if (!err && res.statusCode == 200) {
            //Download the image
            request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
        }
      });
    };
    
    get()
    

0 个答案:

没有答案