Ошибка 330 при получении ответа от сервера nodejs - PullRequest
2 голосов
/ 27 февраля 2012

Я хочу, чтобы файл gzip содержал его в памяти, и всякий раз, когда приходит запрос от клиента, я хочу вывести данные в формате gzip.Однако я получаю сообщение об ошибке 330 в своем браузере (я использую последнюю версию Chrome)

Приведенный ниже код выглядит прямо для меня, есть что-то еще, что мне не хватает?

var http = require('http');
var url = require('url');
var fs = require('fs');
var zlib = require('zlib');
var gzippedData = '';

//read file into memory
fs.readFile('layout.html', function(err, data){
  if(err) throw err;
  zlib.gzip(data, function(err, buffer) {
    if (err) throw err;
    gzippedData = buffer.toString('binary');        
  });
});


var server = http.createServer(function(req, res){
  var path = url.parse(req.url).pathname;
  switch (path){
    case '/': 
        res.writeHead(200, {'content-encoding': 'gzip'});
        res.write(gzippedData);
        res.end();
    break;
    default:  
      res.writeHead(404);
      res.write('404');
      res.end();
}});

server.listen(8080);

1 Ответ

0 голосов
/ 27 февраля 2012

Изменение

gzippedData = buffer.toString('binary');        

до

gzippedData = buffer;

И тебе надо идти!

РЕДАКТИРОВАТЬ: Это потому, что res.write будет кодировать ответ как utf8 по умолчанию. Вместо этого вы можете изменить это на res.write(gzippedData, 'binary'), но это не нужно. Дешевле просто сохранить ссылку на буфер, вместо того, чтобы выделять строку js и кодировать ее снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...