2014-03-26 44 views
1

我一直在努力通过几个others,也 this循环通过数组来从各种来源的http.get数据。我知道nodeJS是异步工作的,它允许将文件写入空白或不完整的数据,但我似乎无法超越这一点。node.js遍历数组写入文件

问题:电话由,文件建立,但文件总是空

目标:遍历数组从网站的数据在本地创建文件。这里是我到目前为止有:

var file_url = 'http://js.arcgis.com/3.8amd/js/esri/', 
    DOWNLOAD_DIR = './esri/', 
    esriAMD = [ '_coremap.js', 'arcgis/csv.js']; 

function readFile(callback) { 
    if (esriAMD.length > 0) { 
    var setFile = esriAMD.shift(), 
     file_name = url.parse(file_url).pathname.split('/').pop(), 
     trial = setFile.split('/').pop(), 
     file = fs.createWriteStream(DOWNLOAD_DIR + trial); 

    http.get(file_url + esriAMD, function(res) { 
     res.on('data', function(data) { 
     file.write(data); 
     console.log(setFile + ' has been written successfully'); 
     }); 
     res.on('end', function(){ 
     console.log(setFile + ' written, moving on'); 
     console.log(esriAMD.length); 
     readFile(callback); 
     }); 
     //readFile(callback); 
    }); 
    } else { 
    callback(); 
    } 
} 
readFile(function() { 
    console.log("reading finishes"); 
}); 

任何有识之士将真正帮助。

感谢,

+0

尝试使用简单的模块,如'request'是你可以直接管的文件流中。 – Gntem

+1

您目前的解决方案遇到了哪些问题? – sgress454

+1

这个“http.get(file_url + esriAMD ...”应该是“http.get(file_url + file_name ...”,对吧?另外,我会在http.get()的回调中创建文件,而不是在你的情况下应该没有问题,因为你不会再调用readFile()直到res.on('end'),但是在逻辑上它会使它更有意义。 –

回答

0

解决方案:我将错误的变量传入http.get

工作代码:

var file_url = 'http://.....', 
DOWNLOAD_DIR = './location/'; 
esriAMD = ['one', 'two', 'three'..0; 

function readFile(callback) { 
if(esriAMD.length > 0) { 
    var setFile = esriAMD.shift(), 
    file_name = url.parse(setFile).pathname.split('/').pop(), 
    trial = setFile.split('/').pop(), 
     file = fs.createWriteStream(DOWNLOAD_DIR + trial); 

    http.get(file_url + setFile, function(res){ 
     res.on('error', function(err){ 
      console.log(err); 
     }); 
     res.on('data', function(data){ 
      file.write(data); 
      console.log(setFile + ' started'); 
     }); 
     res.on('end', function(){ 
      console.log(setFile + ' completed, moving on'); 
     }); 
    }); 
} else { 
    callback(); 
} 
} 
0
var esriAMD = [....]; 
... 
function readFile(callback) { 
    ... 
    http.get(file_url + esriAMD, function(res) { 
     ... 

连接字符串与阵列可以产生意外的结果。

要确保

  • 你知道什么网址,你的程序正在访问
  • 程序交易错误情况(其中fsck的是res.on('error', ...)?)