在我的server.js文件中,我发出一个HTTP GET请求,假设它返回xml。当我记录GET请求对控制台的响应时,它是含有大量问号和黑色钻石的乱码,如下图所示:
当我使用我在GET请求中使用的相同网址并在浏览器中打开它时会自动下载一个gzip文件,该文件在解压缩后包含一个包含数据的清晰xml文件(在我的文本编辑器中)。
如何在server.js文件中以正确的形式获取xml?我需要在我的程序中使用它,而不是在文本编辑器中(显然)。
这是我的GET请求:
axios.get('http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l')
.then(function(response) {
console.log(response.data);
});
我尝试使用targz库提取gzip文件,如下所示:
axios.get('http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l')
.then(function(response) {
targz().extract(response.data, '/data', function(err){
if (err) {
console.log('Something is wrong ', err.stack);
}
console.log('Job done!');
});
});
我在控制台中收到错误消息:" Path必须是没有空字节的字符串"。我应该使用targz的提取方法还是我只是错误地使用它?我试图"提取"或解压缩response.data。
答案 0 :(得分:2)
基于此:new sort.go
var feedURL = 'http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l';
var request = require('request'),
zlib = require('zlib'),
fs = require('fs'),
out = fs.createWriteStream('./feed.xml');
request(feedURL).pipe(zlib.createGunzip()).pipe(out);
答案 1 :(得分:0)
从更新的代码中,您可能需要将第一个参数(response.data)设置为gzip文件的文件系统上的路径,因此出现空字节错误。我会考虑写入文件系统,然后提取,或者让你从网址中提取的另一个模块。
当你从提取的gzip文件中获取XML时(你在正确的路径上,没有双关语),你可以使用一个节点模块,如xml2js,它将xml解析成一个Javascript对象,使其易于使用。