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

Node.js用axios发HTTP请求报socket hang up,Postman正常如何解决

问题原因与解决方案

1 先修正代码中的明显错误

你提供的代码存在2处和axios用法不符的问题,是直接触发报错的可能原因:

  • axios会自动序列化JS对象为JSON格式,也会自动添加Content-Type: application/json请求头,手动执行JSON.stringify(body)会导致data被二次序列化,服务端解析失败直接断开连接
  • res.data.json()是fetch API的用法,axios已经默认将响应体解析为JS对象,不需要额外调用json()方法,调用不存在的方法会触发未捕获异常,也可能导致连接未正常关闭触发socket hang up
    修正后的参考代码:
const getToken = async (username, password) => {
  try {
    const body = {username, password}
    const options = {
      method: 'POST',
      url: API_URI.auth,
      data: body
    }
    const response = await axios(options)
    console.log(response.data)
    return response.data
  } catch (error) {
    // 打印完整错误栈方便排查
    console.log(error.message, error.stack)
    return false
  }
}

2 排查代理配置差异

Postman和代码运行环境的代理配置不一致是该类问题最常见的诱因:

  • 检查是否给axios设置了全局代理axios.defaults.proxy,可以显式将该配置设为false禁用代理重试
  • 检查代码运行的系统/容器环境是否设置了全局HTTP_PROXY、HTTPS_PROXY环境变量,和Postman的代理设置对比,确保一致

3 调整DNS解析配置(Node.js环境专属)

Node.js v17及以上版本默认开启IPv6优先的DNS解析策略,大部分服务端未适配IPv6路由会导致连接超时断开:

  • 启动代码时添加运行参数:node --dns-result-order=ipv4first 你的入口文件.js
  • 或者在代码入口最顶部添加配置:
const dns = require('dns')
dns.setDefaultResultOrder('ipv4first')

4 排查版本兼容性问题

  • 如果近期升级过axios版本,退回至v0.27.2、v1.3.5等稳定版本重试,部分小版本存在连接池bug会导致连接异常断开
  • 如果近期升级过Node.js版本,退回至v16.x的LTS版本重试

5 调整HTTP连接配置

可以显式禁用axios的连接复用,避免连接池中过期的空闲连接被复用导致报错:

const https = require('https')
const options = {
  // 其余配置保持不变
  httpsAgent: new https.Agent({ keepAlive: false })
}

6 全量对比请求配置

开启axios的拦截器打印完整的请求头、请求体,和Postman中正常请求的配置逐字段对比,部分服务端会校验User-Agent、Accept、Origin等请求头字段,不符合要求的请求会被服务端直接断开连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:05