2013-03-19 5 views
0

Пожалуйста, посмотрите мой код, где я пытаюсь сжать данные, используя промежуточное программное обеспечение connect.compress. Как я могу разобрать строку JSON в браузере, чтобы получить распакованные данные. Когда я пытаюсь поразить localhost: 2080, я получаю ошибку загрузки страницы.Ошибка загрузки веб-страницы при разборе JSON-строки

Клиентский код

var options = { 
host: '127.0.0.1', 
port: 2080, 
path: "/", 
headers:{ 
'accept-encoding': 'gzip' 
} 
}; 
var req = http.request(options, function(res) { 
console.log('STATUS: ' + res.statusCode); 
console.log('HEADERS: ' + JSON.stringify(res.headers)); 
var data = ''; 
res.on('data', function (chunk) { 
data += chunk; 
}); 
res.on('end', function (chunk) { 
var data2 = JSON.parse(data); 
console.log(data2.app_id); 
}); 
}); 

код сервера

app = connect(); 
app.use(connect.compress(console.log("compressed data"))) 
app.use(connectDomain()) 
.use(connect.query()) 
.use(connectRoute(function (router) { 

router.get('/', function (req, res) { 
      var acceptEncoding = req.headers['accept-encoding']; 

       if (acceptEncoding.match(/\bdeflate\b/)) { 
        res.setHeader('content-encoding', 'deflate'); 
       } else if (acceptEncoding.match(/\bgzip\b/)) { 
        res.setHeader('content-encoding', 'gzip'); 
       } 
      console.log(res._headers); 
      res.setHeader('Content-Type', 'application/json'); 
      res.end('{"app_id": "A3000990"}'); 
      }) 
      })) 

.use(function(err, req, res, next) { 
    res.end(err.message); 
    }); 

http.createServer(app).listen(2080); 

Мы не можем контролировать браузер. Он либо отправляет заголовок Accept-encoding: gzip, deflate, либо нет. Таким образом, мы можем получить данные сжатия с помощью connect.compress().

Любая помощь будет очень полезно

Благодаря

+0

все включено в браузере? Что такое сервер? – mindandmedia

+0

Нет в Firefox его отображение Ошибка кодирования содержимого. В chrome и IE страница не может быть загружена. Но в консоли результаты ожидаются. – user87267867

ответ

0

Там есть несколько вопросов здесь:

  • вы устанавливаете Content-Encoding заголовки на сервере, но и использовать connect.compress, который также будет установлен этот заголовок. Это может привести к конфликтам, поэтому не добавляйте эти заголовки самостоятельно, и пусть connect.compress обрабатывает все сжатие;
  • вы фактически не отправляете HTTP-запрос в свой клиент, добавьте к нему req.end();
  • нет попытки распаковать сжатые данные в вашем клиенте; как это сделать can be found here;
+0

Спасибо :) Это сработало нормально. – user87267867

+0

Мы не можем управлять браузером. Он либо отправляет заголовок Accept-encoding: gzip, deflate, либо нет. Таким образом, мы можем получить данные сжатия с помощью connect.compress(). – user87267867

+0

Что значит? Всегда сжимайте, что бы ни случилось? – robertklep