Express+TypeScript项目axios报ECONNREFUSED 127.0.0.1:80错误如何解决
问题根因
connect ECONNREFUSED 127.0.0.1:80 报错的核心原因是 axios 实际发起请求的地址不是你配置的远端接口,而是默认指向了本地80端口,且本地80端口没有运行对应服务,本质是请求URL生成逻辑异常。
解决方案
按优先级依次排查修复:
- 第一步:排查环境变量加载问题
你代码中请求地址从process.env.GET_CANDIDATE读取,最常见的情况是环境变量未正确加载,读取结果为undefined,导致最终请求URL为空,axios fallback到本地地址。
修复步骤:- 在
getCandidate方法中先打印环境变量值确认是否读取正确:console.log('读取到的接口地址:', process.env.GET_CANDIDATE) - 如果输出为
undefined,确认你已正确配置环境变量加载逻辑:
安装dotenv依赖:npm install dotenv --save
在项目入口文件(如app.ts/index.ts)最顶部引入dotenv:
确认import 'dotenv/config'.env文件放在项目根目录(和package.json同级),且变量名拼写正确:GET_CANDIDATE=https://myapi.com/你的接口路径
- 在
- 第二步:检查URL格式与util.format用法
- 确保环境变量中的地址带完整协议头(
http://或https://),如果仅写myapi.com没有协议,axios会识别为相对路径,默认请求本地地址。 - 如果你的
process.env.GET_CANDIDATE中配置了占位符(如https://myapi.com/%s),需要给util.format传入对应数量的参数,空传会导致URL生成错误。
- 确保环境变量中的地址带完整协议头(
- 第三步:修复axios配置逻辑避免污染
你当前直接修改axios.defaults.headers.common属于全局配置,一方面会覆盖其他请求的公共头,另一方面如果其他地方配置了错误的axios.defaults.baseURL也会影响当前请求。建议改成单次请求单独传headers:async getCandidate(body: any) { const url = util.format(process.env.GET_CANDIDATE); const token = await gjwt.getToken(); try { const res = await axios.post(url, body, { headers: { Authorization: `Bearer ${token}` } }); return res.data; } catch (err) { // 打印实际请求地址方便定位 console.log('请求失败,实际调用地址:', err.config?.url, '错误信息:', err.message) throw err; } }
内容的提问来源于stack exchange,提问作者user2570135
相关产品推荐
相关产品推荐

