Express单请求中Middleware被调用两次的问题排查与修复
解决Express中间件被调用两次的问题
问题原因
浏览器加载页面时会自动发起对/favicon.ico的请求(即使页面未显式引用),这会和你访问页面的根路径请求一起触发通用app.use()中间件,导致控制台两次打印日志。你可以在中间件里添加console.log(req.url)验证,会看到两次请求路径分别是/和/favicon.ico。
解决方案
方案1:直接拦截favicon请求
在通用中间件前添加专门处理/favicon.ico的路由,返回空响应(204状态码),避免触发通用中间件:
const express = require('express') const app = express() // 拦截favicon请求,返回无内容状态码 app.get('/favicon.ico', (req, res) => res.sendStatus(204)) app.use((req, res , next)=>{ console.log("its middleware") res.send("<h1>Hello World</h1>") }) app.listen(3000)
方案2:给通用中间件指定匹配路径
将通用中间件限制为仅处理根路径/的请求,这样其他路径(比如/favicon.ico)不会触发该中间件:
const express = require('express') const app = express() // 仅根路径请求触发此中间件 app.use('/', (req, res , next)=>{ console.log("its middleware") res.send("<h1>Hello World</h1>") }) app.listen(3000)
内容的提问来源于stack exchange,提问作者Tarun Jain
相关产品推荐
相关产品推荐

