Съжалявам за неясния въпрос.. но не съм сигурен точно какъв е проблемът. Имам http сървър на възел, който използвам за обслужване на JSON данни към уеб приложение. Работи чудесно, но моите JSON низове започват да стават големи (10-12 MB), така че искам да добавя компресия с 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 използват потоци и функцията pipe, но аз не изпращам файл, тъй като генерирам JSON данните в приложението от база данни, така че базирам това на примерите за удобен метод. Моето отстраняване на неизправности досега знам, че обектът за отговор е добър и че result.toString('utf8') извежда gobeldy-gook, както се очаква. Ако не изпратя acccept-encoding хедър към сървъра, той изпраща обикновен текст перфектно - така че трябваше да бъдат функциите за компресиране.
Някой има ли представа за това? Почти съм сигурен, че е свързано с липсата ми на разбиране за потоци, канали, буфери и обекта zlib и вероятно е просто проблем със синтаксиса, така че се надявам някой, който разбира всичко това, да ми помогне :)
наздраве