2016-05-09 101 views
0

我使用express js应用程序作为web服务器,但所有静态内容都解压缩(js和css文件)。我尝试了几个解决方案,如使用压缩https://github.com/expressjs/compression但无法正常工作。 这是我做的方式(仅适用于压缩使用的部分):在express js中压缩文件(gzip)4.4.1

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')); 
}); 
+0

你是否在'compression()'中间件声明'express.static()'中间件?此外,使用Express可以使用['app.listen()'](http://expressjs.com/en/4x/api.html#app.listen),而不必使用'http.createServer(app)。 ..' – robertklep

+0

是的,我正好使用static()之前的压缩() – Boltosaurus

回答

6

快递中间件总是在声明的顺序处理。

你有这样的:

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

这意味着,一个请求是第一通过express.static()处理,何时能处理这样的请求时,它会立即生成响应和请求不会被传递到压缩中间件。

如果交换中间件的顺序是这样的:

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

所有请求都会首先经过压缩的中间件,这将设置东西,所以反应会得到压缩。

+0

得到同样的东西。我使用完整代码 – Boltosaurus

+0

更新了quesion''compression' [默认情况下](https://github.com/expressjs/compression#threshold)不会压缩小于1kb的文件 – robertklep

+0

你是对的!感谢您的帮助,现在它可以工作 – Boltosaurus