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文件的内容)作为文件名从磁盘上的文件创buildReadableStream。

你的意思是:

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

它利用了response对象已经是可读stream的事实,您可以pipe道到另一个stream。

如果你不想使用stream,而是缓冲整个身体,那么request可以为你做:

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

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

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