我目前正在使用以下代码片段来尝试获取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数据以便我可以解析它,那么这些文件就会被删除。 node.js没有正确写入这个吗?这发生在我的Mac和c9.io上。任何提示都很可爱。我完全陷入这一部分。
答案 0 :(得分:0)
您使用的功能错误。 fs.writeFile至少需要三个参数filename
,data
和callback
。你无法管道。它只是将数据写入文件名并在完成后执行回调。
你需要的是fs.createWriteStream,它采用路径(除了额外的选项)。它创建了一个可写入的流,您可以将其输入到响应中。
答案 1 :(得分:0)
这些是我用来完成这项工作的步骤。在*.js
文件所在的同一级别创建了一个名为xml的文件夹。使用http://woeid.rosselliot.co.nz/lookup/london
woeids.txt
文件
使用路径定义创建代码的修改版本以使用__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
文件夹。