You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何已通过get发送响应,最后一个app.use仍执行console.log?

为什么访问/home时最后一个app.use中间件仍会执行?

这是因为Express的中间件和路由按代码注册顺序依次匹配执行,而且res.send()并不会自动终止整个中间件链的运行——除非你显式阻止后续执行。

具体执行流程:

  1. 第一个无路径的app.use先执行,调用next()把请求传递给下一个匹配项。
  2. 请求匹配到app.get('/home')路由,执行res.send()发送响应给客户端,但这个处理函数没有提前终止(比如没加return),函数执行完毕后,Express会继续检查后续的中间件。
  3. 最后一个无路径的app.use会匹配所有请求,因此会被执行,输出console.log的内容(不过此时再调用res.send()会报错,因为响应已经发送过了)。

解决方法:

要阻止后续中间件执行,只需要在路由处理函数里加上return,让函数提前终止:

app.get('/home', (req, res) => {
    return res.send('<h1>Home Page</h1>');
});

或者,如果你需要更明确地跳过后续路由/中间件,可以使用next('route')(需要在处理函数中声明next参数):

app.get('/home', (req, res, next) => {
    res.send('<h1>Home Page</h1>');
    next('route');
});

内容的提问来源于stack exchange,提问作者Ashu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:57:07