expression全局中间件不被调用

据我所知,我正在configuration我的全局中间件function,如文档中和主题上的每个论坛post中所述,但不会被调用。 有没有人看到我在做什么错了? expression3.2.5。 在日志输出中,我看到以下内容:

Express server listening on port 9000 inside route GET / 200 7ms - 2b 

我期望看到“内部中间件”,然后“内部路线”。 相反,我只是看到“内线”。

代码:

 var express = require('express'), http=require('http'), path=require('path'); var app = express(); app.enable('trust proxy'); app.set('port', process.env.PORT || 9000); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('layout', 'layout'); app.use(require('express-ejs-layouts')); app.use(express.favicon(__dirname + '/public/images/favicon.ico')); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()) app.use(express.cookieParser('kfiwknks')); app.use(express.session()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); if ('development' == app.get('env')) { app.use(express.errorHandler()); } else { app.use(function(err, req, res, next){ console.error (error); res.send (500, "Internal server error"); }); } app.use (function (req, res, next) { console.log ("inside middleware"); next(); }); app.get ("/", function (req, res) { console.log ("inside route"); res.send(200); }); http.createServer(app).listen(app.get('port'), function() { console.log('Express server listening on port ' + app.get('port')); }); 

这个相关post:

Express 3错误中间件未被调用

特定于error handling中间件。 我的是一个香草中间件。

你应该把你的中间件,然后再使用app.router

 ... app.use (function (req, res, next) { console.log ("inside middleware"); next(); }); ... app.use(app.router); 

从Express 4文档更新了Express 4用户的答案。 看下面的文档的例子。 请注意, app.router已被弃用,不再使用。 我还添加了一个虚拟路由来明确sorting:

“最后定义error handling中间件,在其他app.use()和路由调用之后;例如:

 var bodyParser = require('body-parser'); app.use(bodyParser()); app.get('/', function(req, res) { res.send('hello world'); }) app.use(function(err, req, res, next) { // logic });