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

Next.js 14.1.3执行npm run build报错ECONNREFUSED,dev模式正常

解决Next.js build和Vercel部署时ECONNREFUSED 127.0.0.1:3000错误

核心原因

build阶段或Vercel部署时,代码中存在**硬编码调用http://localhost:3000**的请求,但此时本地3000端口服务未启动(build阶段)或Vercel环境不存在localhost:3000,导致连接被拒绝。dev模式下本地服务正常运行,所以无此问题。

排查与修复步骤

1. 替换所有硬编码的localhost API请求

检查项目中所有页面、组件、工具函数里的fetch请求,将http://localhost:3000/api/xxx这类绝对路径改为相对路径:

// 错误写法
fetch('http://localhost:3000/api/properties')

// 正确写法
fetch('/api/properties')

Next.js会自动根据当前环境处理相对路径,无论本地dev还是Vercel部署都能正常工作。

2. 检查工具函数与依赖的内部请求

查看@/utils/getSessionUser、@/actions/dbActions等依赖文件,确认它们内部是否存在调用localhost的逻辑:

  • 比如getSessionUser若依赖NextAuth的session配置,确保没有硬编码localhost作为回调地址;
  • 如果工具函数中存在跨服务请求,改用环境变量配置目标地址,避免硬编码。

3. 确认预渲染页面的请求逻辑

如果项目中有静态生成(SSG)的页面,build时会执行页面内的fetch或数据获取逻辑:

  • 确保这些请求使用相对路径,而非localhost;
  • 若需要动态数据,将页面改为Server Component或使用增量静态再生(ISR),避免build阶段触发无效的localhost请求。

4. 修复API路由中的代码优化(非直接错误,但建议处理)

你的app/api/properties/route.js中,POST方法的图片上传逻辑存在效率问题:Promise.all被放在了for循环内部,会导致每次循环都重复等待已添加的promise。调整为:

// 修改后的图片上传逻辑
const imageUploadPromises = [];
for (const image of images) {
  const imageBuffer = await image.arrayBuffer();
  const imageArray = Array.from(new Uint8Array(imageBuffer));
  const imageData = Buffer.from(imageArray);
  const imageBase64 = imageData.toString("base64");

  // 将上传promise加入数组,不立即等待
  const uploadPromise = cloudinary.uploader.upload(
    `data:image/png;base64,${imageBase64}`,
    { folder: "propertypulse" }
  ).then(res => res.secure_url);
  
  imageUploadPromises.push(uploadPromise);
}
// 所有上传请求发起后,统一等待结果
const uploadedImages = await Promise.all(imageUploadPromises);
propertyData.images = uploadedImages;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:01:01