面试题答案
一键面试- 正常情况下中间件执行顺序:
- 当客户端向Express应用发送请求时,首先会执行
app.use((req, res, next) => {...})
定义的中间件。按照定义顺序,先执行Middleware 1
,因为app.use
定义的中间件是按照其在代码中出现的顺序依次执行的。Middleware 1
执行完毕后调用next()
,控制权传递给下一个中间件Middleware 2
。Middleware 2
执行完毕后调用next()
,由于没有其他app.use
中间件,且请求路径匹配app.get('/', (req, res) => {...})
,所以执行该路由处理函数,向客户端发送Hello World!
。 - 总结来说,正常顺序为:
Middleware 1
->Middleware 2
-> 路由处理函数(app.get('/'
)。这是因为Express的中间件机制是基于栈的,先进后出,app.use
中间件按照定义顺序依次压入栈中,请求进来时依次执行。
- 当客户端向Express应用发送请求时,首先会执行
- 在Middleware 1中调用
next('route')
时执行顺序变化:- 当在
Middleware 1
中调用next('route')
时,它会跳过当前栈中剩余的app.use
中间件(即Middleware 2
),直接将控制权传递给路由处理函数(app.get('/'
)。 - 所以执行顺序变为:
Middleware 1
-> 路由处理函数(app.get('/'
)。next('route')
的作用就是告诉Express跳过剩余的app.use
中间件,直接寻找匹配的路由处理函数。
- 当在