2015-05-20 1 views
0

Использование экспресс-я могу установить максимальный возраст для кэширования следующим образом:Есть ли способ, чтобы контролировать, какие статические ресурсы получает кэшируется с помощью экспресс

app.use(express.static(path)), { maxAge: 1234567 }); 

Там у меня есть HTML-файл, который загружает несколько сценариев и таблиц стилей. Есть ли способ контролировать максимальный возраст для отдельных файлов? например Я хотел бы установить возраст JS-библиотек до 6 месяцев и не кэшировать файлы, которые часто меняются.

+0

Да. Напишите свое собственное промежуточное программное обеспечение. Он может обернуть 'express.static'. – Brad

+0

Спасибо, Брэд. Теперь я понимаю, что express.static имеет необязательный обратный вызов setHeaders, который предназначен именно для этой цели. Я попробую это первым! – chriskelly

+1

Прохладный, вы должны опубликовать это как ответ. – Brad

ответ

0

В дополнение к maxAge, от Экспресс-версии 4 serve-static имеет дополнительный обратный вызов setHeaders. например

var express = require('express'); 
var serveStatic = require('serve-static'); 
var app = express(); 

app.use(serveStatic('/path/to/files/')), { 
    maxAge: 0 , 
    setHeaders : function (res, path) { 
     if (path === '/path/to/files/vendor-bundle.min.js') { 
      res.setHeader('Cache-Control', public, max-age=345600'); 
      res.setHeader('Expires', new Date(Date.now() + 345600000).toUTCString()); 
     } 
    } 
}); 

Для старых версий экспресс, которые не поддерживают setHeaders это можно писать пользовательские промежуточное программное обеспечение (как заметил выше).

+0

К будущим читателям ... установка как max-age, так и Expires является избыточной. Вам нужен только один. – stone

Смежные вопросы