【问题标题】:ENAMETOOLONG on request for xml documentENAMETOOLONG 应要求提供 xml 文档
【发布时间】:2013-12-14 19:31:21
【问题描述】:

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

这种情况我该怎么办?

【问题讨论】:

    标签: xml node.js stream rss request


    【解决方案1】:

    您正在尝试使用 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);
      }
    });
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 2011-05-02
        • 1970-01-01
        • 2013-01-02
        • 2016-04-26
        • 1970-01-01
        • 2010-11-13
        相关资源
        最近更新 更多