2016-03-14 19 views
0

我正在使用Express 4.13.4版以及我的app.js的以下代码。我试图改变app.use(compression())的位置,但没有显示任何效果。当我运行该应用程序时,在查看chrome开发工具响应标头时看到没有压缩的证据,即它没有gzip内容编码标头。 我是新来的节点js.I想gzip压缩我对浏览器的响应。请帮我解决这个问题。Node.js:无法使用快递压缩响应

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) 
+0

任何人都可以帮我解决这个问题吗?我还没有收到答复。谢谢 – user1840131

回答

0

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

+0

浏览器请求标头上的Accept-Encoding表示:gzip,deflate。你在问什么? – user1840131

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:我的作品。