Node.js expressjs中中间件的位置真的很重要吗?
我正在尝试为我的应用程序使用一个中间件,所以作为一个POC,我刚刚用下面的代码为我的应用程序制作了一个简单的中间件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())
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);