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