ENAMETOOLONG应要求提供xml文档



我正试图通过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>

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

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

你的意思是:

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

它利用了response对象已经是Readable流的事实,您可以通过管道连接到另一个流。

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

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

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

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);
    }   
});

相关内容

  • 没有找到相关文章

最新更新