如何确定 Axios "Network Error"的原因?



我无法获得Axios"得到";在将代码从centos7移动到centos8实例后,请求为前端/后端对工作。有问题的代码在不同的AWS EC2实例上运行得很好。我无法在运行Rocky Linux v8.5的新EC2实例上运行它。

当我捕捉到异常来查看错误时,我看到了一个最无助的:

Error: Network Error

我找不到任何关于投诉或如何解决的信息。我无法获得任何关于问题原因的有用信息。我确信这是一个愚蠢而容易解决的问题——如果我能以某种方式让技术堆栈告诉我问题是什么,那会容易得多

我使用axios组件访问在React应用程序所在的同一实例上运行的Node Express服务。该服务正在端口7003上侦听https。React应用程序调用此服务器,并返回服务提供的数据。

React应用程序和世界其他地方之间的所有通信都使用axios,所以我需要解决这个问题。

我使用VisualStudioCode(VSC(来开发我的React和NodeJS代码。

当我使用wget执行服务时,它似乎起作用:

$ wget "https://my.domain.name.com:7003/getEnvironment"
--2022-02-24 21:46:46--  https://my.domain.name.com:7003/getEnvironment
Resolving my.domain.name.com (my.domain.name.com)... 172.30.2.147
Connecting to my.domain.name.com (my.domain.name.com)|172.30.2.147|:7003... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11205 (11K) [application/json]
Saving to: ‘getEnvironment’
getEnvironment            100%[===================================>]  10.94K  --.-KB/s    in 0s      
2022-02-24 21:46:46 (220 MB/s) - ‘getEnvironment’ saved [11205/11205]

我注意到wget说它正在使用"HTTP";即使我给了它";https";在命令行中。

我使用React/VSC开发服务器在VSC中运行前端。该服务器在端口3003上侦听。

我已经为该服务打开了cors,它正在按预期侦听端口7003。这就是wget工作的原因。

后端(服务(代码如下所示:

...
var cors = require('cors');
...
var app = express();
...
app.use(cors({origin: true, credentials: true}));
...

失败的前端代码如下所示:

checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response.data;
} else {
const error = new Error(`HTTP Error ${response.statusText}`);
error.status = response.statusText;
error.response = response;
console.log(error);
throw error;
}
}
privateLoadEnvironmentUsingURL(url) {
return axios
.get(url)
.then((response) => {return this.checkStatus(response)})
.catch((error) => {
console.log(error);
throw error;
});
}

我已经在VSC的前端和服务中实践了这一点。axios调用失败了,据我所知,这是在调用服务之前进行的。

失败需要一段时间,这让我怀疑暂停正在进行中。我在nodejs服务代码中没有看到任何指示,表明请求实际上正在命中服务。

因此看来;飞行前";协商正在阻止此呼叫。打开cors几乎是我所知道的全部——我对cors没有深入的了解。

我整个下午都在对着这个代码挥舞巫毒鸡,但都无济于事。

当技术堆栈提供的关于实际发生的事情的信息如此之少时,其他开发人员如何发现如何解决这样的问题?

我该怎么做?

我发现并解决了这个问题,一个完全在axios/nodjs/react之外的网络配置问题。事实仍然是,我认为开发人员应该可以从axios引发的异常中获得至少一个提示。

对于那些感兴趣的人来说,问题是新系统的AWSSecurity Group配置。我必须打开Security Group中的端口7003,允许从我的本地IP地址进行访问,以便将请求转发到平台。

我想我应该早点想到这一点——VSC在我的本地系统上产生了一个特殊的Chrome浏览器,它有自己的私人隧道等等。我的本地计算机上运行的浏览器实例似乎针对端口7003发出了请求。AWS安全组阻止了该端口,因此该请求从未发送到服务器。

我通过从本地机器而不是从新的目标EC2实例执行wget来识别问题。失败了,然后我尝试连接telnet。当后者无法连接时,我知道这是安全小组的问题。

最重要的是,有时很容易忘记所有React代码都在浏览器中运行。我知道这是显而易见的。但其含义有时并非如此。