ENAMETOOLONG请求xml文档

时间:2013-11-28 17:10:48

标签: xml node.js stream rss request

我试图通过node的请求模块获取我的RSS数据源(xml文件),如下所示:

var fs = require('fs')
  , request = require('request')
  , feed = 'http://www.benchmark.pl/rss/aktualnosci-pliki.xml';

request.get(feed, function(error, response, body) {
  if (!error && response.statusCode == 200) {
    var csv = body;

    fs.createReadStream(body)
    .on('error', function (error) {
      console.error(error);
    }); 
  }
});

但我收到错误:

{ [Error: ENAMETOOLONG, open '<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>
....
</rss>

在这种情况下我该怎么做?

2 个答案:

答案 0 :(得分:3)

您正尝试使用HTTP请求的正文(即XML文件的内容)作为文件名,从磁盘上的文件创建ReadableStream。

你的意思是:

request.get(feed, function(error, response) {
  if (!error && response.statusCode == 200) {
    response.pipe(someXmlParserStream);
  }
});

利用response对象已经是可读流的事实,你可以管道到另一个流。

如果您不想使用流,而是缓冲整个身体,那么request可以为您做到这一点:

request.get(feed, function(error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body);
  }
});

答案 1 :(得分:0)

这也是我发现问题的解决方案之一:

var FeedParser = require('feedparser')
   ,request = require('request');

request('http://www.benchmark.pl/rss/aktualnosci-pliki.xml')
.pipe(new FeedParser())
  .on('error', function(error) {
    // always handle errors
    //   
  })  
  .on('meta', function (meta) {
    console.log('===== %s =====', meta.title);
  })  
  .on('readable', function() {
    var stream = this, item;
    while (item = stream.read()) {
      console.log('Got article: %s', item.title || item.description);
    }   
});