노드

2014-03-05 3 views
2

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

내가이 파일은 다음 반복하기 전에로드되는 있는지 확인하는 방법 오류를 처리하는 방법을 알아 내려고 노력하고, 최선의 방법이라고 생각하지 않습니다 ... 어떤 도움을 많이 감사합니다.

답변

1

비동기 부분 처리에는 async 모듈을 사용해야하며 request 모듈을 사용하면 많은 노력을 줄일 수 있습니다.

async.cargo 또는 async.map을 사용하여 여러 가지 방법으로 처리 할 수 ​​있습니다. 이론은 사물이나 일련의 사물을 그룹화 한 다음 원하는대로 따라하지만 비동기 방식으로 행동을 취하는 것입니다.

그래서 다운로드 할 파일 배열의 기본 .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); 
    }); 
+0

피닉스! – climboid