2013-02-08 13 views
14

Próbowałem wysłać tekst w gzip, ale nie wiem jak. W examples kod używa fs, ale nie chcę wysyłać pliku tekstowego, tylko ciąg.Nodejs wysyła dane w gzip za pomocą zlib

var zlib = require('zlib'); 
var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html', 'Content-Encoding': 'gzip'}); 

    var text = "Hello World!"; 
    res.end(text); 

}).listen(80); 

Odpowiedz

26

Jesteś w połowie drogi. Mogę serdecznie zgodzić się z tym, że dokumentacja nie jest do końca wystarczająca, aby to zrobić;

var zlib = require('zlib'); 
var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html', 'Content-Encoding': 'gzip'}); 

    var text = "Hello World!"; 
    var buf = new Buffer(text, 'utf-8'); // Choose encoding for the string. 
    zlib.gzip(buf, function (_, result) { // The callback will give you the 
     res.end(result);      // result, so just send it. 
    }); 
}).listen(80); 

uproszczenie nie byłoby użyć Buffer;

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html', 'Content-Encoding': 'gzip'}); 

    var text = "Hello World!"; 
    zlib.gzip(text, function (_, result) { // The callback will give you the 
     res.end(result);      // result, so just send it. 
    }); 
}).listen(80); 

... i domyślnie przesyła kodowanie UTF-8. Jednak ja osobiście wolę chodzić po bezpiecznej stronie, gdy nie ma domyślnego zachowania, które ma więcej sensu niż inne i nie mogę natychmiast potwierdzić go dokumentacją.

Podobnie w przypadku trzeba przekazać obiekt JSON zamiast:

var data = {'hello':'swateek!'} 

res.writeHead(200, {'Content-Type': 'application/json', 'Content-Encoding': 'gzip'}); 
var buf = new Buffer(JSON.stringify(data), 'utf-8'); 
zlib.gzip(buf, function (_, result) { 
    res.end(result); 
}); 
+0

Co oznacza wartość '_' reprezentować w zwrotnego? Myślę, że może to błąd, ale nie mogę go znaleźć ... – cprcrack

+0

@ cprcrack To po prostu nieużywany parametr do wywołania zwrotnego. "_" jest poprawne jako nazwa zmiennej/parametru i używam go jako znacznika, który sprawia, że ​​jest on dla mnie oczywisty, że nie jest używany. –

+0

Wpadłem na pomysł, ale nadal chciałbym wiedzieć, dlaczego wywołujący wywołanie używa tego parametru i czy czasem może być użyty/użyteczny. – cprcrack

Powiązane problemy