我正在尝试使用Node(特别是请求模块)从JSON提要下载许多(大约2,000个)图像。当我尝试这样做(循环通过JSON)时,我得到了
throw er; // Unhandled stream error in pipe.
我检查ulimit -n
并将其设置为256,所以我将其增加到4,000并且我仍然得到相同的错误(尽管在下载更多图像后)。
我有两个问题,
如果我提出的最大下载数量超过我实际拥有的同时下载数量,为什么我仍然会收到错误
"排队"最好的方法是什么?或暂停下载,以免压倒我的系统?这是我的代码。
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()