【问题标题】:Compressing files (gzip) in express js 4.4.1在 express js 4.4.1 中压缩文件(gzip)
【发布时间】:2016-05-09 11:57:34
【问题描述】:

我使用 express js 应用程序作为 Web 服务器,但所有静态内容都已解压缩(js 和 css 文件)。我尝试了几种解决方案,例如使用压缩https://github.com/expressjs/compression,但无法正常工作。 这是我这样做的方式(仅与压缩使用相关的部分):

var app = module.exports = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(morgan('dev'));

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(cookieParser());

var cacheTime = 86;     // 7 days
app.use(compression());
app.use(express.static(__dirname + '/public',{ maxAge: cacheTime }));

http.createServer(app).listen(app.get('port'), function () {
    console.log('Express server listening on port ' + app.get('port'));
});

【问题讨论】:

  • 您是否在声明express.static() 中间件之前 compression() 中间件?此外,使用 Express,您可以使用 app.listen() 而不必使用 http.createServer(app)...
  • 是的,我在compression()之前使用了static()

标签: javascript node.js express gzip


【解决方案1】:

Express 中间件总是按照声明的顺序处理。

你有这个:

app.use(express.static(...));
app.use(compression());

这意味着一个请求首先express.static()处理,当它可以处理这样的请求时,它会立即生成响应,并且该请求永远不会传递给压缩中间件。

如果你交换中间件的顺序,像这样:

app.use(compression());
app.use(express.static(...));

所有请求都将首先通过压缩中间件,该中间件会进行设置,以便响应被压缩。

【讨论】:

  • 得到同样的东西。我用完整的代码更新了问题
  • compression by default 不会压缩小于 1kb 的文件
猜你喜欢
  • 2011-07-28
  • 2014-11-10
  • 2013-12-09
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
相关资源
最近更新 更多