0

我目前正在使用以下代码片段来尝试获取 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。node.js 写得不正确吗?这发生在我的 Mac 和 c9.io 上。任何提示都会很可爱。我很困在这部分。

4

2 回答 2

0

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

使用要使用的路径定义创建代码的修改版本__dirname(有用的解释:node.js 中的 __dirname 和 ./ 有什么区别?)并将代码放入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 );

通过终端运行它,并使用正确的 xml 文件node sample.js填充文件夹。xml

于 2013-07-19T14:43:44.040 回答
0

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

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

于 2013-07-18T04:03:20.793 回答