Nodejs send data in gzip using zlib

后端 未结 1 978
生来不讨喜
生来不讨喜 2020-12-29 06:59

I tried to send the text in gzip, but I don\'t know how. In the examples the code uses fs, but I don\'t want to send a text file, just a string.

const zlib =         


        
相关标签:
1条回答
  • 2020-12-29 07:09

    You're half way there. I can heartily agree that the documentation isn't quite up to snuff on how to do this;

    const zlib = require('zlib');
    const http = require('http');
    
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/html', 'Content-Encoding': 'gzip'});
    
        const text = "Hello World!";
        const 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);
    

    A simplification would be not to use the Buffer;

    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/html', 'Content-Encoding': 'gzip'});
    
        const text = "Hello World!";
        zlib.gzip(text, function (_, result) {  // The callback will give you the 
          res.end(result);                     // result, so just send it.
        });
    }).listen(80);
    

    ...and it seems to send UTF-8 by default. However, I personally prefer to walk on the safe side when there is no default behavior that makes more sense than others and I can't immediately confirm it with documentation.

    Similarly, in case you need to pass a JSON object instead:

    const data = {'hello':'swateek!'}
    
    res.writeHead(200, {'Content-Type': 'application/json', 'Content-Encoding': 'gzip'});
    const buf = new Buffer(JSON.stringify(data), 'utf-8');
    zlib.gzip(buf, function (_, result) {
        res.end(result);
    });
    
    0 讨论(0)
提交回复
热议问题