NodeJS:zlib.gunzip(body)错误地返回`undefined`

时间:2015-03-05 15:24:09

标签: javascript xml node.js http gzip

我有一个准系统服务器,用于解析XML文件(从用户定义的URL引用),并将操作数据作为CSV文件输出以供下载。

我正在尝试实施可选的GZIP解压缩:

function loadURL(req, res) {
    request.get(req.query.url, function(error, response, body) {
        if (req.query.isGzip == 'true') {
            zlib.gunzip(body, function(err, dezipped) {
                var xmlData = dezipped.toString('utf-8');
                parseAndOffload(xmlData, req, res);
            });
        } else {
            parseAndOffload(body, req, res);
        }
    });
}

尽管测试网址(http://flowercard.co.uk/google_product_feed.xml.gz)是一个包含500kb数据的真正GZip文件,但将GZIP文件正文传递给dezipped.toString('utf-8')会返回undefined

为什么?

1 个答案:

答案 0 :(得分:3)

body很可能是一个字符串,而zlib.gunzip()期待一个流/缓冲区。

尝试将encoding: null设为选项。

  

encoding - 要在响应数据的setEncoding上使用的编码。如果为null,则将主体作为缓冲区返回。

request.get(req.query.url, {encoding: null}, function(error, response, body) {
    if (req.query.isGzip == 'true') {
        zlib.gunzip(body, function(err, dezipped) {
            var xmlData = dezipped.toString('utf-8');
            parseAndOffload(xmlData, req, res);
        });
    } else {
        parseAndOffload(body, req, res);
    }
});