Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;管道中未处理的流错误";-Node.js/request中的文件下载过多?_Node.js_Request - Fatal编程技术网

&引用;管道中未处理的流错误";-Node.js/request中的文件下载过多?

&引用;管道中未处理的流错误";-Node.js/request中的文件下载过多?,node.js,request,Node.js,Request,我试图使用Node(特别是请求模块)从JSON提要下载许多(大约2000)图像。当我尝试这样做(通过JSON循环)时,我得到 thrower;//管道中未处理的流错误。 我选中了ulimit-n并将其设置为256,因此我将其增加到4000,但仍然会出现相同的错误(尽管我下载了更多的图像) 我有两个问题 如果我提高的最大下载数量远远超过了我实际拥有的同步下载数量,为什么我仍然会遇到错误 什么是“排队”或暂停下载的最佳方式,以免淹没我的系统?这是我的密码 var fs=require('fs'))

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

thrower;//管道中未处理的流错误。

我选中了
ulimit-n
并将其设置为256,因此我将其增加到4000,但仍然会出现相同的错误(尽管我下载了更多的图像)

我有两个问题

  • 如果我提高的最大下载数量远远超过了我实际拥有的同步下载数量,为什么我仍然会遇到错误

  • 什么是“排队”或暂停下载的最佳方式,以免淹没我的系统?这是我的密码

  • var fs=require('fs'))
    ,http=require('http')
    ,request=require('request'))
    ,url='1〕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()
    

    你解决过这个问题吗?我实际上忘记了这个问题,没有解决它。不过,我认为这不会太具有挑战性。一种方法是使用Promissions并将下载队列设置为300个左右。感谢您回复Startec。昨天写了评论后,我设法解决了我的问题。我注意到文件完成后我没有关闭流。我还没有测试过超过500个文件,但我认为我不需要排队下载。示例:让file=fs.createWriteStream(filePath).on('finish',()=>{file.end();});