AWS Amplify部署Next.js应用后/pages/api路由报错ECONNREFUSED如何解决?
问题原因
AWS Amplify完全支持Next.js /pages/api 目录下的Serverless函数,你遇到的报错不是功能不支持导致的。
从报错日志可以看到请求的目标地址为 undefined/campaigns,说明你的 process.env.BASE_URL 变量在API路由的运行时环境中没有被正确读取,拼接后的请求地址无效,默认指向了本地 127.0.0.1:80 从而触发连接拒绝错误。
解决步骤
- 第一步:检查Amplify控制台环境变量配置
进入你的Amplify项目控制台,打开「环境变量」菜单,确认已添加BASE_URL、MAIL_SERVER_USERNAME、MAIL_SERVER_PASSWORD三个变量,且值填写正确,BASE_URL需要带完整的http/https协议前缀。
- 注意:Next.js的非
NEXT_PUBLIC_开头的环境变量,默认仅在构建阶段可被Amplify读取,运行时的Serverless函数(包括API路由)无法直接获取,需要额外配置导出。
- 第二步:修改amplify.yml配置文件
在项目根目录的amplify.yml中,build阶段的命令里新增将所需环境变量写入.env.production的步骤,参考配置如下:
version: 1 frontend: phases: preBuild: commands: - npm ci build: commands: # 将API路由需要的环境变量写入生产环境变量文件 - env | grep -E "(BASE_URL|MAIL_SERVER_USERNAME|MAIL_SERVER_PASSWORD)" >> .env.production - npm run build artifacts: baseDirectory: .next files: - '**/*' cache: paths: - node_modules/**/*
Next.js运行时会自动加载.env.production文件中的变量,这样API路由就能正常读取到配置的值。
- 第三步:重新部署项目
修改配置后推送代码到仓库,或者在Amplify控制台手动触发一次部署,部署完成后再测试API路由即可。
额外优化建议
你当前的CORS配置仅允许POST请求,但API路由中同时处理了GET请求,建议把CORS初始化的methods参数修改为methods: ['GET', 'POST'],避免跨域拦截问题。
内容的提问来源于stack exchange,提问作者Pranjal Soni
相关产品推荐
相关产品推荐

