Nodejs отправляет данные в gzip с помощью zlib - программирование
Подтвердить что ты не робот

Nodejs отправляет данные в gzip с помощью zlib

Я пытался отправить текст в gzip, но я не знаю как. В примерах код использует fs, но я не хочу отправлять текстовый файл, просто строку.

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!";
    res.end(text);

}).listen(80);
4b9b3361

Ответ 1

Вы на полпути там. Я могу от всей души согласиться с тем, что документация не совсем поняла, как это сделать;

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

Упрощением было бы не использовать 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);

... и, похоже, по умолчанию отправляет UTF-8. Тем не менее, я лично предпочитаю идти в безопасности, когда нет поведения по умолчанию, которое имеет больше смысла, чем другие, и я не могу сразу подтвердить это документацией.

Точно так же, если вам нужно вместо этого передать объект JSON:

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