2016-05-09 2 views
0

Я использую экспресс-приложение js как веб-сервер, но все статическое содержимое распаковывается (файлы js и css). Я попробовал пару решений, таких как использование сжатия https://github.com/expressjs/compression, но не могу получить работает. Вот как я это делаю (только часть актуальна для использования сжатия):Сжатие файлов (gzip) в express js 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

Вы объявляете 'middle.static()' middleware _before_ 'промежуточное программное обеспечение' compression()? Кроме того, с помощью Express вы можете использовать ['app.listen()'] (http://expressjs.com/en/4x/api.html#app.listen) вместо того, чтобы использовать 'http.createServer (приложение). ..' – robertklep

+0

Да, я использую static() прямо перед сжатием() – Boltosaurus

ответ

6

Экспресс промежуточного слоя всегда обрабатывается в порядке объявления.

У вас есть это:

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

Это означает, что запрос является первого обрабатывается express.static(), и когда он может обрабатывать такой запрос, он будет немедленно генерировать ответ и запрос не будет принят к промежуточному программному обеспечению сжатия.

Если поменять порядок ППО, как это:

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

Все запросы будут сначала пройти через промежуточного сжатия, который воздвигнет вещи так, ответы будут архивируется.

+0

, получая то же самое. Я обновил quesion с полным кодом – Boltosaurus

+0

'compression' [по умолчанию] (https://github.com/expressjs/compression#threshold) не будет сжимать файлы размером менее 1kb – robertklep

+0

, вы правы! спасибо за помощь, теперь это работает – Boltosaurus

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