2016-05-09 137 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