2013-02-08 13 views
14

Ich habe versucht, den Text in gzip senden, aber ich weiß nicht wie. In der examples verwendet der Code fs, aber ich möchte keine Textdatei, nur eine Zeichenfolge senden.Nodejs senden Daten in Gzip mit 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); 

Antwort

26

Sie sind auf halbem Weg. Ich kann mit ganzem Herzen zustimmen, dass die Dokumentation nicht so gut ist, wie das geht;

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); 

Eine Vereinfachung wäre nicht die 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); 

... und es scheint UTF-8 standardmäßig zu senden. Aber ich persönlich gehe lieber auf der sicheren Seite, wenn es kein Standardverhalten gibt, das sinnvoller ist als andere, und ich kann es nicht sofort mit Dokumentation bestätigen.

Auch im Fall müssen Sie stattdessen ein JSON-Objekt zu übergeben:

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

Was ist der Wert von '_' in der Callback darstellen? Ich denke vielleicht ein Fehler, aber kann es nicht dokumentiert finden ... – cprcrack

+0

@cprcrack Es ist nur ein unbenutzter Parameter für den Rückruf. '_ 'ist als Variablen-/Parametername gültig und ich benutze es als Markierung, die es ziemlich offensichtlich macht (für mich), dass es nicht verwendet wird. –

+0

Ich bekomme die Idee, aber würde immer noch gerne wissen, warum der Callback-Aufrufer diesen Parameter verwendet und ob es manchmal verwendet/nützlich sein kann. – cprcrack