在node.js中下载XML后的零字节文件

时间:2013-07-18 02:26:18

标签: javascript xml node.js npm

我目前正在使用以下代码片段来尝试获取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上。任何提示都很可爱。我完全陷入这一部分。

2 个答案:

答案 0 :(得分:0)

您使用的功能错误。 fs.writeFile至少需要三个参数filenamedatacallback。你无法管道。它只是将数据写入文件名并在完成后执行回调。

你需要的是fs.createWriteStream,它采用路径(除了额外的选项)。它创建了一个可写入的流,您可以将其输入到响应中。

答案 1 :(得分:0)

这些是我用来完成这项工作的步骤。在*.js文件所在的同一级别创建了一个名为xml的文件夹。使用http://woeid.rosselliot.co.nz/lookup/london

中的一些有效woeid创建了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文件夹。