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

Next.js对接Django时fetch请求出现ECONNREFUSED错误求助

问题分析与解决方案

核心原因定位

从错误信息里的address: '::1'可以明确,Node.js v18的fetch在尝试连接IPv6的localhost(::1),但你的Django默认仅绑定了IPv4的127.0.0.1地址,没有监听IPv6端口,直接导致连接被拒绝。Postman能正常访问是因为它默认优先用IPv4解析localhost,避开了这个冲突。

关键差异点

  1. Node.js版本的fetch实现变化:
    Node.js v18开始内置的Fetch API基于undici库,其DNS解析逻辑和v16时代的node-fetch(或原生HTTP客户端)不同——v18的undici默认优先选择IPv6地址,而v16的客户端通常优先IPv4。

  2. 环境变更的潜在影响:
    安装XCode、Ionic和Capacitor可能修改了系统网络配置(比如启用IPv6本地解析、调整DNS查询优先级),刚好触发了v18 fetch的IPv6优先行为,而之前的环境中这个问题未暴露。

替代解决方案(无需降级Node.js)

除了降级到v16,还有以下几种更灵活的解决方式:

  • 修改Django启动命令:让Django同时监听IPv4和IPv6地址
    python manage.py runserver [::]:8000
    
  • 强制fetch使用IPv4:在请求URL中直接用127.0.0.1代替localhost
    fetch('http://127.0.0.1:8000/api/account/login', {
      method: 'POST',
      // 其他请求配置
    })
    
  • 调整Node.js的DNS解析优先级:通过环境变量强制Node.js优先选择IPv4
    # 终端临时生效(启动Next.js时)
    NODE_OPTIONS="--dns-result-order=ipv4first" npm run dev
    
    # 永久生效(添加到shell配置文件如~/.zshrc)
    export NODE_OPTIONS="--dns-result-order=ipv4first"
    

内容的提问来源于stack exchange,提问作者Tomas Le Blanc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:10:22