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有关。 谢谢大家。