Node.js expressjs中中间件的位置真的很重要吗?

Node.js expressjs中中间件的位置真的很重要吗?,node.js,express,Node.js,Express,我正在尝试为我的应用程序使用一个中间件,所以作为一个POC,我刚刚用下面的代码为我的应用程序制作了一个简单的中间件 var processingPage = function(req, res, next) { console.log("Req.Query "+req.url); next(); } // all environments app.set('port', process.env.PORT || 4000); app.use(express.compress())

我正在尝试为我的应用程序使用一个中间件,所以作为一个POC,我刚刚用下面的代码为我的应用程序制作了一个简单的中间件

var processingPage = function(req, res, next) {
    console.log("Req.Query "+req.url);
    next();
}

// all environments
app.set('port', process.env.PORT || 4000);
app.use(express.compress());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(allowCrossDomain);
app.use(processingPage);
在这个阶段,当请求到来时,processingPage中间件无法工作,因此我更改了如下代码(将
app.use(processingPage);
移至顶部)


在此之后,中间件开始工作。为什么会出现这种行为?

因为中间件是按照声明的顺序进行处理的(Express无法声明中间件依赖项或优先级,所以它需要推断中间件在
app.use()
'd时的执行顺序)

通过将您的中间件移动到链的末端,另一个中间件发回响应(并结束中间件链)的可能性非常大

我猜您正在测试的请求正在由
app.router
express.static
处理

这也意味着由于同样的原因,
allowCrossDomain
应该在中间件链中向上移动

var processingPage = function(req, res, next) {     
    console.log("Req.Query "+req.url);
    next();
}

// all environments
app.set('port', process.env.PORT || 4000);
app.use(express.compress());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(processingPage);
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(allowCrossDomain);