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

为什么Node Express中Axios发送的GET请求会触发两次?

问题原因

你观察到的日志现象对应Express后端收到了两次请求,绝大多数情况是Chrome浏览器自动发起的favicon.ico请求命中了你写的通配路由:
你定义的app.get('/:id')会匹配根路径下的所有一级路径请求。当你在Chrome地址栏访问业务地址时,浏览器除了发起你预期的目标路径请求外,还会自动发送GET /favicon.ico请求拉取网站图标,这个请求也会进入你的路由逻辑,此时req.params.id的值为favicon.ico,拼接到第三方API地址后不符合接口要求,就会触发Axios报错打印Error。而第一次的正常业务请求执行成功,所以前端可以正常拿到返回数据。

解决方法

你可以任选下面一种方案修复:

  • 优先处理/favicon.ico请求,直接返回空状态,避免进入业务逻辑,把这段代码放在/:id路由之前即可:
app.get('/favicon.ico', (req, res) => res.sendStatus(204));
  • 给业务路由添加统一前缀,比如修改为app.get('/api/:id'),和/favicon.ico这类系统请求路径区分开
  • 在现有路由逻辑里新增参数校验,先判断req.params.id的格式是否符合第三方API要求,不符合就直接返回错误,不发起Axios请求

验证方式

你可以在路由逻辑最开头加一行打印代码,就能直观看到两次请求的具体路径:

console.log('收到请求,路径:', req.path, 'id参数:', req.params.id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:27:01