错误:1、有响应http错误 2、无响应的网络错误 防火墙等
没有 。当
error.code存在(如ECONNABORTED,ERR_NETWORK等)时,通常 没有error.response对象。
防火墙导致连接失败

1. ECONNABORTED / ETIMEDOUT - 请求超时
2. ECONNRESET - 连接被重置
// 连接建立后被异常中断 // 1. 防火墙/安全组阻断 // 服务器防火墙主动断开连接 // 云服务商安全组规则限制 // 2. 代理服务器中断 // 代理服务器配置问题或故障 // 3. 服务器进程崩溃 // 后端服务突然停止
axios.get('/api/data')
.catch(error => {
// 情况1:服务器返回了HTTP错误状态码
if (error.response) {
// 这里 error.code 通常为 undefined
console.log('HTTP错误:', error.response.status);
console.log('错误代码:', error.code); // undefined
// 显示用户友好提示
const status = error.response.status;
if (status >= 500) {
showMessage('服务器暂时不可用,请稍后再试');
} else if (status === 404) {
showMessage('您查找的内容不存在');
} else if (status === 401 || status === 403) {
showMessage('请重新登录以继续操作');
} else {
showMessage('操作失败,请稍后重试');
}
}
// 情况2:网络层错误(没有收到服务器响应)
else if (error.request) {
// 这里 error.code 可能有值,error.response 为 undefined
console.log('网络错误,错误代码:', error.code);
console.log('服务器响应:', error.response); // undefined
// 根据错误代码显示提示
if (error.code) {
switch (error.code) {
case 'ECONNABORTED':
case 'ETIMEDOUT':
showMessage('请求超时,请检查网络连接');
break;
case 'ECONNRESET':
showMessage('网络连接中断,请重试');
break;
case 'ENOTFOUND':
case 'ERR_NAME_NOT_RESOLVED':
showMessage('无法连接到服务器,请稍后再试');
break;
case 'ERR_NETWORK':
showMessage('网络连接失败,请检查网络设置');
break;
default:
showMessage('网络异常,请检查后重试');
}
} else {
// 没有错误代码的通用网络错误
showMessage('网络连接异常,请检查后重试');
}
}
// 情况3:其他错误(如配置错误、取消请求等)
else {
console.log('其他错误:', error.message);
showMessage('操作失败,请重试');
}
});
ECONNABORTED / ETIMEDOUT 错误的全称以及明明规则
`ECONNABORTED` 和 `ETIMEDOUT` 错误详解
**一、错误全称与命名规则**
**1. `ECONNABORTED`**
**全称**: **Connection Aborted**(连接中止)
**命名规则**:
`E` - Error(错误前缀,Unix/Linux系统错误码标准)
`CONN` - Connection(连接)
`ABORTED` - 已中止
**来源**: POSIX/Unix 系统错误码
**错误号**: 通常对应系统错误码 **ECONNABORTED (103)**
**2. `ETIMEDOUT`**
**全称**: **Connection Timed Out**(连接超时)
**命名规则**:
`E` - Error
`TIMEDOUT` - 已超时(或写作 TIMEOUT)
**来源**: POSIX/Unix 系统错误码
**错误号**: 通常对应系统错误码 **ETIMEDOUT (110)**
**二、POSIX 错误码命名规则**
**通用格式:**
```
E + 描述性名称(全大写,下划线分隔)
```
**常见前缀含义:**
```c
// Linux/Unix 系统错误码示例
EACCES // E + ACCESS(权限不足)
EADDRINUSE // E + ADDRESS IN USE(地址已被使用)
EAGAIN // E + AGAIN(资源暂时不可用)
EBADF // E + BAD FILE DESCRIPTOR(错误的文件描述符)
ECONNREFUSED// E + CONNECTION REFUSED(连接被拒绝)
EEXIST // E + EXIST(文件已存在)
EFAULT // E + FAULT(错误地址)
EINTR // E + INTERRUPTED(系统调用被中断)
EINVAL // E + INVALID ARGUMENT(无效参数)
EIO // E + INPUT/OUTPUT(I/O错误)
EISDIR // E + IS DIRECTORY(是目录而非文件)
ELOOP // E + LOOP(符号链接循环)
ENOENT // E + NO ENTRY(文件或目录不存在)
ENOMEM // E + NO MEMORY(内存不足)
ENOSPC // E + NO SPACE(设备无空间)
ENOTDIR // E + NOT DIRECTORY(不是目录)
ENOTEMPTY // E + NOT EMPTY(目录非空)
EPERM // E + PERMISSION(操作不允许)
EPIPE // E + PIPE(管道破裂)
EROFS // E + READ-ONLY FILE SYSTEM(只读文件系统)
ESPIPE // E + SEEK ON PIPE(在管道上定位)
ESRCH // E + SEARCH(进程不存在)
```
**三、Node.js 中的错误码体系**
Node.js 继承了 POSIX 错误码,并扩展了一些:
**网络相关错误码:**
```javascript
// 连接相关
'ECONNABORTED' // Connection aborted (连接中止)
'ECONNREFUSED' // Connection refused (连接被拒绝)
'ECONNRESET' // Connection reset by peer (对端重置连接)
// 超时相关
'ETIMEDOUT' // Connection timed out (连接超时)
'EAI_AGAIN' // Temporary failure (临时故障)
// 地址相关
'EADDRINUSE' // Address already in use (地址已被使用)
'EADDRNOTAVAIL' // Address not available (地址不可用)
'EAFNOSUPPORT' // Address family not supported (地址族不支持)
// DNS相关
'ENOTFOUND' // Host not found (主机未找到)
'EAI_FAIL' // Non-recoverable failure (不可恢复的故障)
```
**Node.js 特有的错误码:**
```javascript
// HTTP/HTTPS 相关
'ERR_HTTP_HEADERS_SENT' // Headers already sent
'ERR_HTTP_INVALID_STATUS_CODE' // Invalid status code
// TLS/SSL 相关
'ERR_TLS_CERT_ALTNAME_INVALID' // Certificate alt name invalid
'ERR_TLS_DH_PARAM_SIZE' // DH param size too small
// 流相关
'ERR_STREAM_WRITE_AFTER_END' // Write after end
'ERR_STREAM_DESTROYED' // Stream destroyed
// 其他
'ERR_SOCKET_BAD_PORT' // Bad port number
'ERR_INVALID_ARG_TYPE' // Invalid argument type
```
**四、浏览器环境与 Axios 错误码**
浏览器环境下的错误命名有所不同:
**浏览器网络错误:**
```javascript
// Chrome/Edge 的错误消息(不是错误码)
'net::ERR_CONNECTION_RESET' // 连接被重置
'net::ERR_CONNECTION_TIMED_OUT' // 连接超时
'net::ERR_CONNECTION_REFUSED' // 连接被拒绝
'net::ERR_NAME_NOT_RESOLVED' // DNS解析失败
'net::ERR_EMPTY_RESPONSE' // 空响应
'net::ERR_CERT_COMMON_NAME_INVALID' // 证书名称无效
// Firefox 的错误消息
'NS_ERROR_CONNECTION_REFUSED' // 连接被拒绝
'NS_ERROR_NET_TIMEOUT' // 网络超时
```
**Axios 错误码映射:**
```javascript
// Axios 将浏览器错误转换为标准错误码
axios.get('/api')
.catch(error => {
// 浏览器错误消息 → Axios 错误码
if (error.message.includes('ERR_CONNECTION_TIMED_OUT')) {
// 对应 ETIMEDOUT
}
if (error.message.includes('ERR_CONNECTION_RESET')) {
// 对应 ECONNRESET
}
});
```
**五、错误码的来源层级**
```
应用层 (Axios/浏览器)
↓
传输层 (Node.js/操作系统)
↓
系统层 (POSIX/Linux Kernel)
```
**示例流程:**
```javascript
// 1. 浏览器请求超时
// 浏览器控制台显示: net::ERR_CONNECTION_TIMED_OUT
// 2. Axios 捕获并转换
try {
await axios.get('/api', { timeout: 5000 });
} catch (error) {
// error.code = 'ETIMEDOUT'
// error.message = 'timeout of 5000ms exceeded'
}
// 3. Node.js 底层(如果是Node.js环境)
const net = require('net');
const socket = net.createConnection();
socket.on('error', (err) => {
// err.code = 'ETIMEDOUT' (来自系统调用)
});
// 4. 系统层(Linux)
// 系统调用返回错误码: ETIMEDOUT (110)
```
**六、完整的错误码对照表**
| 错误码 | 全称 | POSIX编号 | 中文含义 | 常见场景 |
|--------|------|-----------|----------|----------|
| `ECONNABORTED` | Connection Aborted | 103 | 连接中止 | 客户端主动取消、代理中断 |
| `ETIMEDOUT` | Connection Timed Out | 110 | 连接超时 | 网络延迟、服务器响应慢 |
| `ECONNRESET` | Connection Reset | 104 | 连接重置 | 服务器崩溃、防火墙阻断 |
| `ECONNREFUSED` | Connection Refused | 111 | 连接被拒绝 | 端口未监听、服务未启动 |
| `ENOTFOUND` | Host Not Found | - | 主机未找到 | DNS解析失败 |
| `EADDRINUSE` | Address Already In Use | 98 | 地址已被使用 | 端口被占用 |
| `EACCES` | Permission Denied | 13 | 权限不足 | 文件/端口权限问题 |
**七、如何查看系统错误码**
**在 Linux/Mac 中:**
```bash
查看所有错误码
errno -l
查看特定错误码
perl -e 'print !+0, "\\n" if ! = "ETIMEDOUT";'
C语言中
#include <errno.h>
#include <stdio.h>
printf("ETIMEDOUT code: %d\n", ETIMEDOUT);
```
**在 Node.js 中:**
```javascript
// 查看错误码定义
const os = require('os');
console.log(os.constants.errno);
// 常见的
console.log({
ECONNABORTED: os.constants.errno.ECONNABORTED,
ETIMEDOUT: os.constants.errno.ETIMEDOUT,
ECONNRESET: os.constants.errno.ECONNRESET,
});
```
**总结**
**命名规则**: `E` + 描述性英文(全大写)
**来源**: POSIX/Unix 标准,被各种系统继承
**层级**: 系统层 → 运行时层 → 应用层
**映射**: 不同环境(浏览器/Node.js)错误码可能不同,但有对应关系
这些错误码是网络编程的通用语言,了解它们有助于更准确地诊断和解决问题。