Node.js: невозможно сжать ответ с помощью экспресс

Я использую экспресс-версию 4.13.4 и следующий код для своего app.js. Я попытался изменить расположение app.use(compression()), но никакого эффекта не дало. когда я запускаю приложение, я не видел никаких доказательств сжатия при просмотре заголовков ответов chrome dev tools, то есть у него нет заголовка кодирования содержимого gzip. Я новичок в node js. Я хочу сжать свой ответ в браузере с помощью gzip. Пожалуйста, помогите мне решить эту проблему.

var compression = require('compression')
var express = require('express');
var http = require('http');
var app = express();
app.use(compression());
var settings = {
    UiServerPort:         8080, 
    ApiServerHost: "localhost", 
    ApiServerPort:       12121
};

app.use('/ui', express.static('ui')); 
app.all('/api/*', function (req, res) {
    var options = {
        host: settings.ApiServerHost,
        port: settings.ApiServerPort,
        path: req.url.substring(4), 
        method: 'POST' 
    };

    var requestData = '';
    req.on('data', function (data) { requestData += data; });
    req.on('end', function () {
        var request = http.request(options, function (response) {
            var responseData = '';
            res.flush();
            response.on('data', function (data) { responseData += data; });

            response.on('end', function () {
                res.statusCode = response.statusCode;
                res.write(responseData);
                res.end();
            });
        });
        request.write(requestData);
        request.end();
    });
});
app.listen(settings.UiServerPort)

person user1840131    schedule 14.03.2016    source источник
comment
Кто-нибудь может помочь мне решить эту проблему? Я пока не получил ответа. Спасибо   -  person user1840131    schedule 17.03.2016


Ответы (2)


вы видели "Vary Accept-Encoding" ?? если вы не используете сжатие, это не будет отображаться. и я вставляю ваш код, но он не может работать.

person martin J    schedule 14.03.2016
comment
В заголовке запроса Accept-Encoding в браузере написано: gzip, deflate. Вы об этом спрашиваете? - person user1840131; 14.03.2016

Вместо того

app.use(compression())

Вы должны добавить этот фрагмент кода:

app.use(compression({filter: shouldCompress}))

function shouldCompress (req, res) {
   if (req.headers['x-no-compression']) {
       // don't compress responses with this request header
       return false
   }

  // fallback to standard filter function
   return compression.filter(req, res)
 }

PS: у меня работает.

person Manikanta    schedule 21.02.2017