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

使用天气API开发时出现ERR_HTTP_HEADERS_SENT错误求助

ERR_HTTP_HEADERS_SENT错误原因解析

这个错误的核心原因是你在同一个HTTP请求周期内,多次调用了响应发送方法(比如res.send()、res.json()、res.end())。

Express的响应对象是一次性的——一旦你调用任何发送响应的方法,HTTP响应的头部就已经发送给客户端了,后续再尝试发送响应时,Node.js会检测到头部已发送,直接抛出这个错误。

常见触发场景包括:

  • 异步操作(比如你用Axios调用天气API)的回调/then/catch分支里,没有控制好代码逻辑,导致多次触发响应发送
  • 条件判断不严谨,比如if和else分支都调用了响应方法,或者某个分支执行后没加return终止后续代码,导致后面又执行了响应发送
  • 循环处理多请求时,没理清每个请求的响应边界,意外触发重复响应

举个典型错误示例:

app.get('/weather', (req, res) => {
  axios.get('https://weather-api.example.com/data')
    .then(data => {
      res.json(data);
    })
    .catch(err => {
      res.status(500).send('请求失败');
    });
  // 多余的响应发送,会触发错误
  res.send('默认响应');
});

不管Axios请求成功或失败,最后一行的res.send都会执行,同一个请求被发送两次响应,直接抛出错误。

另一个常见场景:

app.get('/weather', (req, res) => {
  if (!req.query.city) {
    res.status(400).send('缺少城市参数');
    // 没加return,后续代码继续执行
  }
  axios.get(`https://weather-api.example.com/data?city=${req.query.city}`)
    .then(data => {
      res.json(data);
    });
});

当请求没有city参数时,先发送了400响应,但因为没加return,后面的Axios请求依然会执行,完成后又调用res.json,导致重复发送响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:32