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

使用Axios POST请求API遇ECONNREFUSED错误求助

问题排查:AxiosError: connect ECONNREFUSED 127.0.0.1:80

问题描述

我的应用监听4000端口,尝试用axios.post连接5000端口的API地址localhost:5000/api/name/user/validate验证授权令牌,但出现连接80端口被拒绝的错误,API本身运行正常。

错误详情

AxiosError: connect ECONNREFUSED 127.0.0.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
port: 80,
address: '127.0.0.1',
syscall: 'connect',
code: 'ECONNREFUSED',
errno: -4078,
config: {
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
adapter: [Function: httpAdapter],
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: { FormData: [Function] },
validateStatus: [Function: validateStatus],
headers: {
Accept: 'application/json, text/plain, /',
'Content-Type': 'application/json',
'User-Agent': 'axios/0.27.2',
'Content-Length': 225
},
method: 'post',
url: 'http:localhost:5000/api/name/user/validate',
data: '{"proxy":false,"headers":{"Authorization":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MzA0YmYxZmVhM2RiNDYyYjNhM2FiM2IiLCJpYXQiOjE2NjEyODA2MzksImV4cCI6MTY2MTg4NTQzOX0.ClIS6Z3iYAM1631f59Pgu6Gy1MfZFwnqMEk_IXheAzg"}}'
},
// 省略部分request详情
}

相关代码

const requireAuth = async (req, res, next) => {
    console.log(authorization);
    const config = {
        headers: {
          'Authorization':  authorization
        }
      }
    // 用认证服务器验证凭证
    try{
        axios.post('http:localhost:5000/api/name/user/validate', config)
        .then((response) => { 
            console.log(response);
            console.log("adssdasd");
            return next();
        })
        .catch((error) => {
            console.log(error);
        })
    } catch (error) {
        console.log(error);
        res.status(401).json({error: "请求未授权"});
    }
}

问题原因及修复方案

1. URL格式错误

错误日志里的url是http:localhost:5000/...,协议http:后面少了双斜杠//,导致Axios无法识别正确的主机和端口,默认走了80端口(HTTP默认端口)。

2. Axios.post参数顺序错误

axios.post的参数顺序是:url, data, config。你把headers配置当成了请求体data传进去,导致请求体变成了配置内容,同时没有正确设置请求头。

修复后的代码

const requireAuth = async (req, res, next) => {
    console.log(authorization);
    const config = {
        headers: {
          'Authorization': authorization
        }
    }
    try{
        // 修复URL格式,调整参数顺序:空对象作为请求体,第三个参数传配置
        const response = await axios.post('http://localhost:5000/api/name/user/validate', {}, config);
        console.log(response);
        console.log("adssdasd");
        next();
    } catch (error) {
        console.log(error);
        res.status(401).json({error: "请求未授权"});
    }
}

额外检查项

  • 如果API不需要请求体,第二个参数传{}或null都可以
  • 用curl http://localhost:5000/api/name/user/validate测试API是否真的能连通

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:48:19