我使用express js app作为Web服务器,但所有静态内容都是解压缩的(js和css文件)。我尝试了一些解决方案,比如使用压缩https://github.com/expressjs/compression但是无法正常工作。 这是我正在做的方式(只有与压缩使用相关的部分):
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 :(得分:9)
Express中间件始终按声明顺序处理。
你有这个:
app.use(express.static(...));
app.use(compression());
这意味着express.static()
处理的请求首先处理,当它处理此类请求时,它会立即生成响应,并且请求永远不会传递给压缩中间件。
如果你交换中间件的顺序,就像这样:
app.use(compression());
app.use(express.static(...));
所有请求将首先通过压缩中间件,这将设置内容,以便响应将被压缩。