我有一个名为fetchXML的函数,假设将XML文件写入我的根目录,名为feed.xml,然后我想在console.xml中调用feed.xml中的数据。我使用fs.readFile并使用'utf-8'指定编码,如下所示:Why does Node.js' fs.readFile() return a buffer instead of string?
但我的console.log的结果仍然是缓冲区。我在feed.xml中检查了它确实包含xml。
var out = fs.createWriteStream('./feed.xml');
var fetchXML = function() {
var feedURL = 'http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l';
var stream = request(feedURL).pipe(zlib.createGunzip()).pipe(out);
stream.on('finish', function() {
fs.readFile('./feed.xml', 'utf-8', function(err, data) {
console.log(data);
});
});
}
fetchXML();
答案 0 :(得分:1)
这里的主要问题是在这种情况下设置了err
,它会告诉您toString()
失败(由于文件的大小)。然后它将读取的数据保留为Buffer,并将其作为第二个参数传递给回调。
这可能被认为是一个部分错误,因为大多数人可能不希望看到第二个参数传入,但同时err
是设置(并且你应该总是处理错误) 让你有机会用已经读入内存的(原始二进制)数据做其他事情。
就解决方案而言,您可能需要一个流式解析器来处理大量数据(如此数百兆字节)。对于XML,提供流接口的一个这样的模块是node-expat
。