2013-03-15 38 views
4

當使用快遞與Node.js的,你可以控制公共資源的緩存頭是這樣的:如何設置子目錄緩存頭快遞

app.use(express.static(path.join(__dirname, 'public'), { maxAge: 31557600000 })); 

,公共文件夾下建立的一切是靜態可用,緩存超時時間爲1年。但是如果我想爲公共下的其他文件設置不同的超時值呢?假設我在公共/圖像/圖標下有一些圖像,我想要一年的較小值?我試圖增加第二個電話來靜態像這樣:

app.use(express.static(path.join(__dirname, 'public'), { maxAge: 31557600000 })); 
app.use(express.static(path.join(__dirname, 'public/images/icons'), { maxAge: 12345 })); 

但它沒有工作。這似乎忽略了第二個陳述。思考?

回答

1

source code顯示靜態中間件攔截了來自url路徑部分的任何類似於文件路徑的內容,從配置的根目錄統計文件並在其存在時對其進行提供。

使用香草中間件不可能改變maxAge選項。

我的建議是你讓你自己的中間件(只是一個函數),並創建靜態中間件(每目錄)中相應的號碼和你的req, res, next參數轉發到正確的一個

+2

感謝您的幫助。不完全遵循您的推薦解決方案。一種表達noob。我可以快速獲得樣品嗎? – d512 2013-03-15 16:30:06

4

快速測試中間件,以便爲所以,如果你把最具體的express.static調用第一,那麼它應該工作,即

app.use(express.static(path.join(__dirname, 'public/images/icons'), { maxAge: 12345 })); 
app.use(express.static(path.join(__dirname, 'public/images'), { maxAge: 1234567 })); 
app.use(express.static(path.join(__dirname, 'public/else'), { maxAge: 9874567 })); 
app.use(express.static(path.join(__dirname, 'public'), { maxAge: 31557600000 })); 

編輯:

這不會保持的路徑,所以我會做

function static(dirname, age) { 
    return express.static(path.join(__dirname, dirname), { maxAge: age }); 
} 

,然後調用

app.use('/public/images/icons', static('public/images/icons', 12345)); 
app.use('/public/images/', static('public/images', 1234567); 

這背後的原因是,我以前的解決方案,安裝所有的靜態文件,而此解決方案將每個目錄安裝在具有正確maxAge的文件路徑中

+0

你確定嗎?它似乎沒有工作。 – d512 2013-03-15 20:11:41

+1

請參閱我的編輯 - 添加靜態目錄時,我以前的解決方案搞亂了文件路徑 – Benoir 2013-03-15 22:20:19

+0

您有static()方法帶三個參數。是對的嗎?表達式的版本有一個靜態,只有兩個參數。 – d512 2013-03-18 16:13:00

0

您需要安裝每個文件夾在public之內,因爲它將成爲服務器。也就是說,沒有public

app.use('/css', express.static(__dirname + '/public/css', { maxAge: '1h'})); 
app.use('/img', express.static(__dirname + '/public/img', { maxAge: '1h'})); 
app.use('/fonts', express.static(__dirname + '/public/fonts', { maxAge: '1h'})); 
app.use(express.static(path.join(__dirname, 'public')));