Использование static(), staticCache() и compress() node.js для подключения промежуточного программного обеспечения

У меня есть приложение Express 3.0, и я пытаюсь использовать промежуточное программное обеспечение static(), staticCache() и compress() для обслуживания и сжатия моих статических файлов. Это моя текущая функция app.configure():

 app.configure(function() {
  app.use(express.favicon(__dirname + '/public/favicon.ico', {maxAge: 86400000}));
  app.use(express.bodyParser());
  app.use(express.cookieParser('foo'));
  app.set('views', __dirname + '/views');
  app.engine('.html', mustache({cache: true}).render);
  app.use(express.session({ store: sessionStore, secret: 'foo'}));
  app.use(express.staticCache());
  app.use(express.static(__dirname + '/public', {maxAge: 86400000}));
  app.use(express.compress());
});

// routes are loaded here

В этой конфигурации YSlow сообщает, что мои файлы .css и .js не сжаты, и я не могу получить кеш-клип, не очищая мой браузер и не обновляя страницу несколько раз. Я также попытался вставить отладочную инструкцию в промежуточном программном обеспечении staticCache, чтобы сообщить об ошибках кэша, а бег ab -n 10000 -c 500 показывает 0 хитов кэша.

Очевидно, что я делаю что-то неправильно (я предполагаю, что порядок или параметры испорчены), но я не могу понять, что это такое. У кого-нибудь есть рабочий пример с этими тремя компонентами промежуточного программного обеспечения, которые работают правильно вместе?

Ответ 1

  • начните с размещения app.use(express.compress()); в качестве первого промежуточного программного обеспечения, запомните промежуточное ПО в реальном времени в стеке FIFO...
  • поместите часть static перед сеансовыми частями, еще лучше, разделите их на отдельные маршруты (/app - с помощью файлов cookie, session и bodyParser,/static - без них)
  • ohh и забыть о staticCache, он устарел и несовместим с static, если вы хотите, чтобы более зрелый статический сервисный компонент использовал st