我目前正在使用以下代码片段来获取Yahoo天气XML文件:
// 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数据放入字符串中以便对其进行解析,那么这些文件就是0’d out。node.js写得不对吗?这在我的Mac和c9.io上都发生过。任何提示都会很好。我陷入了困境。
您使用了错误的函数。fs.writeFile至少需要三个参数filename
、data
和callback
。您无法通过管道连接到它。它只是将数据写入文件名,并在完成后执行回调。
您需要的是fs.createWriteStream,它采用路径(除了额外的选项)。它创建了一个可写流,您可以通过管道将其发送到响应中。
这些是我用来做这项工作的步骤,它很有效。在*.js
文件所在的同一级别中创建了一个名为xml的文件夹。创建了woeids.txt
文件,其中包含来自http://woeid.rosselliot.co.nz/lookup/london
创建了带有路径定义的代码的修改版本,以使用__dirname
(对此的有用解释:__dirname和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
文件夹。