xml - ENAMETOOLONG 请求 xml 文档

标签 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>

遇到这种情况我该怎么办?

最佳答案

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

关于xml - ENAMETOOLONG 请求 xml 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271583/

相关文章:

java - 从布局中包含的 ListView 接收字符串。安卓

node.js - 您如何在 Node.js 中构建服务器应用程序的测试?

node.js - 如何在不连接http服务器的情况下使用连接路由器?

javascript - Windows 上的 Git Hook 无法识别 Node

流式传输中的 Android MediaRecorder

c# - 如何克隆 MemoryStream 对象?

java.lang.ClassCastException : GridLayout. LayoutParams 无法转换为 Frame.LayoutParams

c# - 我的属性搜索 XPath 查询有什么问题

python - Python 2.6.2 中的 ElementTree 处理指令支持吗?

javascript - 在新窗口中显示 pdf 流