express.compress()和express.responseTime()不适用于控制器的输出

art*_*olk 2 connect node.js express

我有以下脚手架快递申请:

var 
    express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , _ = require('underscore');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 5000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.compress());
  app.use(express.responseTime());
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});
Run Code Online (Sandbox Code Playgroud)

我对快速生成器生成的代码所做的唯一修改:

  app.use(express.compress());
  app.use(express.responseTime());
Run Code Online (Sandbox Code Playgroud)

问题:处理到LESS文件是gzip并具有响应时间的X-HTTP标头,但是我的控制器(HTML页面)的输出不是gzippped并且没有标头.

也许我理解连接中间件错了?

Joh*_*yHK 5

对于要压缩的路由生成的页面(我假设这是控制器的含义),您需要移动此行:

app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

在这一行之后:

app.use(express.compress());
Run Code Online (Sandbox Code Playgroud)

express.compress 仅影响其后添加的组件.