axios.js 怎么区分net::ERR_CONNECTION_TIMED_OUT 和 net::ERR_CERT_AUTHORITY_INVALID?

现在碰到问题为不清楚如何在js内部判断

区分net::ERR_CONNECTION_TIMED_OUT
后端服务挂了

ssl证书无效
net::ERR_CERT_AUTHORITY_INVALID;

在axios的错误返回中都是Err_network,有办法在js中区分开么?

补充三种不同错误axios的错误返回截图

image.png
image.png
image.png

阅读 1.9k
avatarAI BotBETA

在JavaScript中,axios库通常会返回一个错误对象,其中包含有关错误的详细信息。然而,axios本身可能无法直接区分net::ERR_CONNECTION_TIMED_OUTnet::ERR_CERT_AUTHORITY_INVALID错误,因为这些错误通常都表示网络问题。

对于net::ERR_CONNECTION_TIMED_OUT错误,这通常意味着请求的服务器没有在规定的时间内响应。对于net::ERR_CERT_AUTHORITY_INVALID错误,这通常意味着服务器提供的SSL证书无效或不受信任。

虽然我们不能直接从axios的错误中区分这两种错误,但我们可以根据其他来源的上下文信息来推断。例如,你可以查看请求的URL或证书的相关信息。

如果你想在前端代码中处理这种情况,你可以在发出请求之前验证URL和证书。如果URL无效或证书无效,你可以选择不发出请求或采取其他适当的措施。

这是一个示例代码片段,使用Node.js的内置https模块来验证SSL证书的有效性:

const https = require('https');
const fs = require('fs');

// 读取证书文件
const cert = fs.readFileSync('path/to/certificate.pem');

// 创建https agent,并设置证书
const agent = new https.Agent({
  ca: cert,
});

// 发起请求
https.request('https://example.com', { agent }).on('error', (error) => {
  if (error.code === 'ERR_CERT_AUTHORITY_INVALID') {
    console.error('SSL证书无效');
  } else if (error.code === 'ERR_CONNECTION_TIMED_OUT') {
    console.error('连接超时');
  } else {
    console.error('其他网络错误');
  }
});

请注意,这个示例假设你已经有了服务器的SSL证书,并且该证书是有效的。如果你没有有效的证书,你可能需要联系你的服务器的管理员或使用其他方法来验证服务器和其证书的有效性。

2 个回答

SSL 错误会很快返回,超时会很长时间才返回?

如果主动设置了过期时间

正常来说状态码和响应消息也会有区别
image.png

如果没有主动设置过期时间

error.request 对象中有个 timeout 属性,可以通过它判断,一般来说超时会变成 1 ,其他错误则是 0

axios
  .get("https://example.com")
  .catch(function (error) {
    if (error.request.timeout === 0) {
      console.log("其他错误")
    } else {
      console.log("超时错误")
    }
})

非超时错误
超时错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题