2015-03-05 3 views
0

У меня есть сервер узлов на основе barebones, который анализирует XML-файлы (на которые ссылаются пользовательские URL-адреса) и выводит управляемые данные в виде файла CSV для загрузки.NodeJS: zlib.gunzip (body) ошибочно возвращает `undefined`

Я пытаюсь выполнить дополнительный 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') возвращается undefined.

Почему?

ответ

3

Скорее всего, что body является строкой, а zlib.gunzip() ожидает поток/буфер.

Попробуйте установить encoding: null в качестве опции.

кодирование - кодировка, используемая для 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); 
    } 
}); 
+0

Интернет действительно изумляет меня с его быстротой. Большое спасибо, это сделало работу. –

Смежные вопросы