2012-02-27 9 views
7

私はNode.js/Expressを使い慣れていませんが、私はゆっくりとそれを理解していると思います。Node.js/Expressキャッシング

app.configure('production', function() { 
    var oneYear = 31557600000; 
    app.use(express.static(__dirname + '/public', { maxAge: oneYear })); 
    app.use(express.errorHandler()); 
}); 

ChromeのキャッシュにPEEKは、はい、すべてがキャッシュされていることが明らかになった:私はかなり標準であるように思わ私が言うことができるものから、このコードを、追加しました。ハレイ!しかし、自分のサイトでChromeの監査を実行すると(他のノード駆動サイトでも気付いています)、Chromeはサイトには何もキャッシュされていないと言います。この不一致を引き起こす原因は何ですか?

+1

実行する前に、あなたの環境を 'production'で設定しましたか? – EhevuTov

+0

うん、Nodejitsuで稼働していて、自動的に 'production'がデフォルトとして使われている。プロダクションモードでローカルに実行すると、すべてのリソース上でヘッダmax-age = 0が生成されます。インスペクタがキャッシュに何も表示しないので、Chromeが安全にキャッシュされている可能性があります。 – JacobEvelyn

答えて

11
var express = require('express'); 
var app = express.createServer(); 
var oneYear = 31557600000; 
app.use(express.static(__dirname + '/public', { maxAge: oneYear })); 
app.use(express.errorHandler()); 
app.get('/', function(req, res){ 
    res.send('hello world'); 
}); 
app.listen(3000); 

上記のコードを実行し、/ publicディレクトリにあり、テスト画像を持っているtest.htmlというページに移動は私に次の応答ヘッダーを与えるとChromeの監査は、私のPC(クローム17.0上だけで結構です。 963.83、Linux、ノード0.6.13、Express最新版)。実際にプロダクションモードになっているかどうかを再度確認する必要があります。

Accept-Ranges:bytes 
Cache-Control:public, max-age=31557600 
Connection:keep-alive 
Date:Fri, 23 Mar 2012 22:52:24 GMT 
ETag:"120877-1278958150000" 
Last-Modified:Mon, 12 Jul 2010 18:09:10 GMT 
X-Powered-By:Express 
+1

だから私はばかだ...私はリクエストではなくレスポンスであるCache-Controlヘッダーを見ていた。 しかし、私はまだChromeの監査に問題があります。プロダクションモードでローカルに実行すると、すべてがうまくいきます:Cache-Controlヘッダーの正しいChromeの監査は不平を言っていません。 しかし、Nodejitsuにデプロイするとき、Cache-Controlはまだ正しいです(つまり、本番モードを使用している必要があります)が、現在Chromeの監査では何もキャッシュされていないと言われています。 – JacobEvelyn