express.js压缩中间件不起作用

时间:2013-12-23 11:19:44

标签: javascript node.js express gzip

我的应用中有以下中间件:

app.use(express.favicon(__dirname + '/static/public/images/favicon.ico'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.cookieParser('SECRET!'));
app.use(express.static(__dirname + config.static_path, {maxAge: 365 * 86400000}));
app.use(express.session({secret: 'SECRET!'}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);

标题示例: jquery.js headers

但是静态内容不会压缩。可能是什么问题?

2 个答案:

答案 0 :(得分:32)

静态内容可能无法压缩的原因有多种:

  • express.compress维护最小文件大小阈值;大小低于此阈值的文件(默认值:1024字节)将不会被压缩;
  • express.compress还维护内容类型的白名单以进行压缩;如果您要提供的内容类型不在该列表中的文件,它也不会被压缩;

修复:

app.use(express.compress({
  threshold : 0, // or whatever you want the lower threshold to be
  filter    : function(req, res) {
    var ct = res.get('content-type');
    // return `true` for content types that you want to compress,
    // `false` otherwise
    ...
  }
}));

(作为参考,this是使用的默认过滤函数)

答案 1 :(得分:2)

问题在于重新路由到第80个端口,如:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

感谢@robertklep的帮助!