Извините за неконкретный вопрос.. но я не совсем понимаю, в чем проблема. У меня есть http-сервер node, который я использую для передачи данных JSON в веб-приложение. Он отлично работает, но мои строки JSON начинают становиться большими (10-12 МБ), поэтому я хочу добавить сжатие с помощью zlib.
Данные JSON находятся в строковой переменной, и я хочу сжать, а затем записать в объект ответа... но результаты, которые возвращаются клиенту, всегда имеют идеальные заголовки и без содержимого. Вот моя функция DeliverResponse:
var deliverResult = function (data, response, callback, acceptEncoding){
var payload = callback + '(' + JSON.stringify(data) + ');';
if (acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, { 'Content-Encoding': 'deflate', 'Content-Type': 'text/javascript; charset=UTF-8' });
zlib.deflate(payload, function(err, result){
if(!err){
//console.log(result.toString('utf8')); // I have data on the console here
response.write(result.toString('utf8')); // No data sent here
}
});
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, { 'Content-Encoding': 'gzip', 'Content-Type': 'text/javascript; charset=UTF-8' });
zlib.gzip(payload, function(err, result){
if(!err){
response.write(result.toString('utf8'));
}
});
} else {
writelog('INFO', 'Returning data without compression\n');
response.writeHead(200, { 'Content-Type': 'text/javascript; charset=UTF-8' });
response.write(payload);
}
response.end();
}
В примерах http-сервера с zlib используются потоки и функция конвейера, но я не отправляю файл, поскольку генерирую данные JSON в приложении из базы данных, поэтому я основываюсь на примерах методов удобства. Мое устранение неполадок до сих пор Я знаю, что объект ответа хорош, и что result.toString('utf8') выводит gobeldy-gook, как и ожидалось. Если я не отправляю серверу заголовок acccept-encoding, он отлично отправляет обычный текст, так что это должны быть функции сжатия.
Кто-нибудь знает об этом? Я почти уверен, что это связано с моим непониманием потоков, каналов, буферов и объекта zlib, и, вероятно, это просто проблема синтаксиса, поэтому, надеюсь, кто-то, кто понимает все это, может мне помочь :)
Ваше здоровье