2016-05-09 10 views
0

私はWebサーバーとしてexpress js appを使用していますが、すべての静的コンテンツは解凍されています(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

ミドルウェアの 'express.static()'を 'compression()'ミドルウェアより前に宣言していますか?また、Expressでは 'http.createServer(app)を使わずに[' app.listen() '](http://expressjs.com/en/4x/api.html#app.listen)を使うことができます。 .. ' – robertklep

+0

はい、私は圧縮の前に静的()を使用しています – Boltosaurus

答えて

6

Expressのミドルウェアは、常に宣言の順序で処理されます。

あなたはこれを持っている:要求が最初express.static()によって処理され、そしてそれは、そのような要求を処理することができたとき、それはすぐに応答を生成し、要求が渡されることはありませんであることを意味し

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

圧縮ミドルウェアに転送する。

あなたはミドルウェアの順番を入れ替える場合は、次のように:

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

すべての要求は最初の応答が圧縮されますので、物事を設定しますこれは、圧縮ミドルウェアを通過することになります。

+0

同じことを得る。 – Boltosaurus

+0

'compression' [デフォルト](https://github.com/expressjs/compression#threshold)は、1kb未満のファイルを圧縮しません。 – robertklep

+0

あなたは正しいです!助けてくれてありがとう、今それは働く – Boltosaurus