2013-07-18 84 views
0

XML下載我有下面的代碼片段我目前使用試圖讓雅虎天氣的XML文件:零字節文件的Node.js

// This script requires request libraries. 
// npm install request 

var fs = require('fs'); 
var woeid_array = fs.readFileSync('woeid.txt').toString().split("\n"); 
var grabWeatherFiles = function (array) { 
//var http = require('http'); 
//var fs = require('fs'); 

array.forEach( 
function(element) { 
    var http = require('http'); 
    var file_path = 'xml/' + element + '.xml'; 
    console.log(file_path); 
    var file = fs.createWriteStream(file_path); 
    var request = http.get('http://weather.yahooapis.com/forecastrss?w=' + element, function(response) { 
     response.pipe(file); 

    }); 

}); 

}; 
grabWeatherFiles(woeid_array); 

此代碼段是在成功下載XML文件。但是,如果我嘗試讀取文件並獲取字符串中的XML數據以便解析它,則文件將被清空。 node.js不能正確寫入?這發生在我的Mac和c9.io上。任何提示將是可愛的。我很困擾這部分。

回答

0

您正在使用錯誤的功能。 fs.writeFile需要至少三個參數filename,datacallback。你不能管道。它只是將數據寫入文件名並在完成時執行回調。

你需要的是fs.createWriteStream,它採取路徑(除了額外的選項)。它會創建一個可寫入的流,您可以將該流寫入響應中。

+0

請檢查新的代碼片段。 – DaGr8Gatzby

0

這些是我用來完成這項工作的步驟,它的工作原理。在*.js文件所在的同一級別創建一個名爲xml的文件夾。創建woeids.txt文件有一些有效的woeids從http://woeid.rosselliot.co.nz/lookup/london

創建代碼的修改後的版本與路徑定義中使用__dirname(它有用的解釋:What is the difference between __dirname and ./ in node.js?),並把代碼sample.js:通過終端

// This script requires request libraries. 
// npm install request 

var fs = require('fs'); 
var woeid_array = fs.readFileSync(__dirname + '/woeids.txt').toString().split("\n"); 
var grabWeatherFiles = function (array) { 
    array.forEach( 
    function(element) { 
     var http = require('http'); 
     var file_path = __dirname + '/xml/' + element + '.xml'; 
     console.log(file_path); 
     var file = fs.createWriteStream(file_path); 
     var request = http.get('http://weather.yahooapis.com/forecastrss?w=' + element, function(response) { 
      response.pipe(file); 

     }); 

    }); 
}; 
grabWeatherFiles(woeid_array); 

運行它node sample.js,並用適當的xml文件填充xml文件夾。

相關問題