应用程序适用于app.all但不适用于app.use ...不确定原因

时间:2013-09-17 21:28:49

标签: node.js express

我在尝试在我的应用中实现一些中间件时遇到了一些问题 特别是,app.use()似乎没有抓住,我不明白为什么 以下是我的内容。

routes / index.js

var Sessions = require('../events');  

module.exports = exports = function(app) {

  app.use(Sessions.isLoggedIn);

  //app.use() does not catch but this does
  //app.all('*', Sessions.isLoggedIn); 

  // Home Page
  app.get('/', displayHome);
  app.get('/:library/:books', displayLibrary);

}

events.js

module.exports = exports = {

  isLoggedIn: function(req, res, next) {
      console.log('isLoggedIn');
      return next();
}

有关为什么app.use()没有捕获的任何建议?

更新
以下是 ape.js

中的配置
app.configure(function() {
  app.set('port', process.env.VCAP_APP_PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.logger('dev'));
  app.use(express.compress()); // compress responses
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(expressValidator);
  app.use(express.cookieParser('locket'));
  app.use(express.cookieSession({
    key: 'locket',
    secret: 'mySecret',
    cookie: {httpOnly: true, expires: 0, path: '/'}
  }));

  // cache every file going out
  app.use(function(req, res, next) {
    if (!res.getHeader('Cache-Control')) {
      res.setHeader('Cache-Control', 'public, max-age=' + (86400 / 1000));
    }
    next();
  });

  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler({showStack: true, dumpExceptions: true}));
});

routes(app);

1 个答案:

答案 0 :(得分:1)

路由器在您的中间件功能有机会运行之前响应请求。

app.js设置了其他几个中间件函数,然后是use s app.router。然后调用您的routes / index.js文件,use是一个新的中间件函数,在 app.router之后添加

路由器之前

use isLoggedIn函数,或者将其专门用于需要检查登录状态的路由:

app.get('/', Sessions.isLoggedIn, function(req, res) { ... });