现在碰到问题为不清楚如何在js内部判断
区分net::ERR_CONNECTION_TIMED_OUT
后端服务挂了
和
ssl证书无效
net::ERR_CERT_AUTHORITY_INVALID;
在axios的错误返回中都是Err_network,有办法在js中区分开么?
补充三种不同错误axios的错误返回截图
现在碰到问题为不清楚如何在js内部判断
区分net::ERR_CONNECTION_TIMED_OUT
后端服务挂了
和
ssl证书无效
net::ERR_CERT_AUTHORITY_INVALID;
在axios的错误返回中都是Err_network,有办法在js中区分开么?
补充三种不同错误axios的错误返回截图
在JavaScript中,axios
库通常会返回一个错误对象,其中包含有关错误的详细信息。然而,axios
本身可能无法直接区分net::ERR_CONNECTION_TIMED_OUT
和net::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证书,并且该证书是有效的。如果你没有有效的证书,你可能需要联系你的服务器的管理员或使用其他方法来验证服务器和其证书的有效性。
正常来说状态码和响应消息也会有区别
在 error.request
对象中有个 timeout
属性,可以通过它判断,一般来说超时会变成 1 ,其他错误则是 0
axios
.get("https://example.com")
.catch(function (error) {
if (error.request.timeout === 0) {
console.log("其他错误")
} else {
console.log("超时错误")
}
})
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答3.3k 阅读
1 回答2.4k 阅读
1 回答7.8k 阅读
1 回答3k 阅读✓ 已解决
SSL 错误会很快返回,超时会很长时间才返回?