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

NodeJS: zlib.gunzip( body ) erroneously returns `undefined`

我有一个准系统节点服务器,它解析 XML 文件(引用自用户定义的 URLs)并将操作数据输出为 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);
        }
    });
}

尽管测试 URL (http://flowercard.co.uk/google_product_feed.xml.gz) 是一个真正的 GZip 文件,有 500kb 的数据,将 GZIP 文件主体传递给 dezipped.toString('utf-8') returns undefined.

为什么?

很可能 body 是一个字符串,而 zlib.gunzip() 期待 stream/buffer。

尝试将 encoding: null 设置为一个选项。

encoding - Encoding to be used on setEncoding of response data. If null, the body is returned as a Buffer.

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