Node.js:无法使用express压缩响应

时间:2016-03-14 15:02:57

标签: node.js express compression gzip http-compression

我正在使用Express版本4.13.4以及我的app.js的以下代码。我尝试更改app.use(compression())的位置,但没有显示任何效果。当我运行应用程序时,在查看chrome dev工具响应标题时没有看到压缩的证据,即它没有gzip内容编码标题。     我是节点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)

2 个答案:

答案 0 :(得分:0)

你看到了“Vary Accept-Encoding”吗?如果你不使用压缩,这将不会显示。我粘贴你的代码,但它无法运行。

答案 1 :(得分:0)

而不是

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:它对我有用。