在节点中获取100个zip文件

所以我试图从服务器获取一堆文件。 目前的代码基本如下。

var http = require('http'); var fs = require('fs'); var arr = [{id:'fileOne', id:'fileTwo', id:'fileThree',....]; function fetchData() { for (var i = 0; i < arr.length; i++) { var file = fs.createWriteStream("../path/file.zip"); var request = http.get("url/AFG_adm.zip", function(response) { response.pipe(file); }); } } 

我不认为这是最好的方法,试图找出如何处理错误,如何确保在下一次迭代之前加载文件…任何帮助,非常感激。

您应该使用async模块来处理asynchronous部分, request模块也会为您节省大量的工作量。

您可以使用async.cargoasync.map以多种方式处理此async.map 。 理论是把事情或一系列事情组合起来,然后根据你想做的事情采取行动,但采取asynchronous的方式。

所以要下载的文件数组的基本.map是这样的。

 // required modules var async = require('async'); var request = require('request'); // array of urls var URLs = ['hxxp://...ZipFile1.zip', 'hxxp://...ZipFile2.zip']; // destination directory var destinationDirectory = 'downloads'; // asyncDownload function function asyncDownload(url, callback) { // get filename var filename = url.substring(url.lastIndexOf(".") + 1); // create write stream var stream = fs.createWriteStream(destinationDirectory + "/" + filename); // listen for open event to start request and pipe stream.on('open', function () { request(url).pipe(stream); }) // when finish , call callback stream.on('finish', function () { callback(null, destinationDirectory + "/" + filename); }) } async.map( URLs, asyncDownload, function (err, results) { console.log(results); });