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

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

本文关键字:返回 undefined 错误 zlib gunzip body NodeJS      更新时间:2023-09-26

我有一个barebones节点服务器,它解析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);
        }
    });
}

尽管测试URL(http://flowercard.co.uk/google_product_feed.xml.gz)将GZip文件体传递给dezipped.toString('utf-8')返回undefined

为什么?

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

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

encoding-要在响应数据的setEncoding上使用的编码。如果为null,则返回正文作为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);
    }
});