Next.js连接Strapi报ECONNREFUSED ::1:1337错误如何解决
问题根因
报错connect ECONNREFUSED ::1:1337的核心原因:
getStaticProps属于Next.js的SSG静态生成逻辑,在页面构建阶段完全运行在Node.js服务端,接口请求由Node.js直接发出,和浏览器、Postman的请求环境相互独立- Node.js 17及以上版本默认调整了DNS解析优先级,会把
localhost优先解析为IPv6回环地址::1 - 本地默认启动的Strapi服务仅绑定了IPv4回环地址
127.0.0.1:1337,没有监听IPv6的1337端口,导致连接直接被拒绝
Postman、浏览器能正常访问接口,是因为这类客户端默认优先将localhost解析为IPv4地址,和Node.js的解析规则不一致,才会出现“客户端能通但Next.js服务端请求失败”的错位现象。
修正方案
按优先级从高到低选择任意一种即可生效:
- 方案1(最快无副作用):直接替换请求地址的
localhost为IPv4回环地址
找到getStaticProps中的axios请求逻辑,跳过DNS解析步骤直接指定IPv4地址,改完重启Next.js服务即可:// 修改前 const res = await axios.get('http://localhost:1337/api/foods') // 修改后 const res = await axios.get('http://127.0.0.1:1337/api/foods') - 方案2:调整Strapi启动配置,同时监听IPv4/IPv6地址
打开Strapi项目下的config/server.js配置文件,修改host绑定规则,改完重启Strapi服务即可:module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), // 原有默认值为127.0.0.1,修改为0.0.0.0后会监听所有网卡地址 port: env.int('PORT', 1337), // 其余原有配置保持不变 }) - 方案3:调整Node.js启动参数,强制优先解析IPv4地址
修改Next.js项目package.json中的启动脚本,添加DNS解析规则参数,改完重启Next.js服务即可:
Windows系统直接设置环境变量报错的话,可以安装{ "scripts": { "dev": "NODE_OPTIONS='--dns-result-order=ipv4first' next dev", "build": "NODE_OPTIONS='--dns-result-order=ipv4first' next build", "start": "NODE_OPTIONS='--dns-result-order=ipv4first' next start" } }cross-env依赖做跨平台环境变量兼容。
验证标准
修改完成后重新触发Next.js页面构建,终端不再出现ECONNREFUSED类报错,页面能正常渲染从Strapi拉取的美食列表数据即为修复成功。
内容的提问来源于stack exchange,提问作者naka sho
相关产品推荐
相关产品推荐

