expression中间件的一个奇怪的执行结果

我的代码:

var http = require("http"); var express = require("express"); var app = express(); app.set('port',3332); app.get('/',function(req,res,next){ res.send('OK'); next(); }); app.use(function(req,res,next){ console.log('middleware 1'); next(); }); app.use(function(req,res,next){ console.log('middleware 2'); }); http.createServer(app).listen(app.set('port'),function(){ console.log('nodejs start listen 3332 port!'); }); 

nodejs服务器输出:nodejs启动监听3332端口!

中间件1

中间件2

中间件1

中间件2

为什么每个中间件都被解雇了2次,谁能帮我解释一下。 我知道如果在app.get()移除next() ,它将被触发一次。 中间件链是一个环形链吗?谢谢。

修改代码,在上一个app.use()添加next() app.use() 。 还有一个问题:

 var http = require("http"); var express = require("express"); var app = express(); app.set('port',3332); app.get('/',function(req,res,next){ res.send('OK'); next(); }); app.use(function(req,res,next){ console.log('middleware 1'); next(); }); app.use(function(req,res,next){ console.log('middleware 2'); next(); // new add }); http.createServer(app).listen(app.set('port'),function(){ console.log('nodejs start listen 3332 port!'); }); 

当我第一次访问url时,会调用app.use()注册的app.use() 。 但是seconde时间,第三次在浏览器和cmd命令行都访问url,不会被调用。 为什么?

这是favicon.ico请求。 浏览器每次请求网站索引页时都会尝试加载图标。 输出url在控制台中看到它。 使用curl / wget运行请求。

我更新我的nodejs,使用浏览器时没关系。 所以我认为这个问题与低版本的nodejs有关。 谢谢大家。