2013-02-08 6 views
14

gzipでテキストを送信しようとしましたが、どうすればよいか分かりません。 examplesでは、コードはfsを使用しますが、テキストファイルを送信したくないだけです。Nodejsはzlibを使用してgzipでデータを送信します

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

答えて

26

あなたは半分です。私は、ドキュメントがこれをどうやってどうやって鼻を切るのではないということに心から同意することができます。

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

簡略化のために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); 

...デフォルトではUTF-8を送信するようです。しかし、私は個人的には、他のものより理にかなったデフォルトの動作がなく、すぐにドキュメントで確認できないときは、安全面を歩くことを好みます。

同様に、場合にあなたが代わりにJSONオブジェクトを渡す必要があります:

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

'_'の値はコールバックで何を表しているのでしょうか?私は多分エラーだと思っていますが、それが文書化されているのを見つけることができません... – cprcrack

+0

@cprcrackそれはコールバックの単なる未使用のパラメータです。 '_'は変数/パラメータ名として有効で、私はそれが使用されていないことを(私には)明らかにするマーカーとして使用します。 –

+0

私は考えましたが、コールバックの呼び出し元がそのパラメータを使用している理由と、時にはそれが役に立つか役立つかを知りたいと思っています。 – cprcrack

関連する問題