axios

[复制链接]
发表于 2025-10-30 16:03:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.简介:

Axios 是一个基于 Promise 的当代化 HTTP 客户端库,广泛用于欣赏器和 Node.js 环境中发送 HTTP 哀求。它的计划目的是简化前后端数据交互,提供更高效、更易用的 API。
2.Axios 的焦点作用


  •         发送 HTTP 哀求
            支持全部常见哀求方法(GET、POST、PUT、DELETE 等),并主动处置惩罚哀求参数和相应数据。
  •         拦截哀求和相应
            可以在哀求发送前或相应返回后添加同一的处置惩罚逻辑(比方添加认证 Token、同一处置惩罚错误)。
  •         数据转换
            主动将哀求数据转换为 JSON 格式(或自界说格式),并将相应数据(如 JSON)主动转换为 JavaScript 对象。
  •         取消哀求
            提供取消哀求的机制,制止不须要的网络哀求(比方用户频仍利用时取消旧哀求)。
  •         客户端防御 XSRF
            支持跨站哀求伪造(XSRF)防护,主动在哀求头中添加安全根据。
  •         上传/下载进度监控监控
            支持监听文件上传和下载的进度。
3.发送哀求

1. GET 哀求
  1. // 基本 GET
  2. axios.get('https://api.example.com/data')
  3.   .then(response => console.log(response.data))
  4.   .catch(error => console.error(error));
  5. // 带 URL 参数
  6. axios.get('https://api.example.com/data', {
  7.   params: {
  8.     id: 123,
  9.     page: 2
  10.   }
  11. });
  12. // 使用 async/await
  13. async function fetchData() {
  14.   try {
  15.     const response = await axios.get('https://api.example.com/data');
  16.     console.log(response.data);
  17.   } catch (error) {
  18.     console.error(error);
  19.   }
  20. }
复制代码
2. POST 哀求
  1. axios.post('https://api.example.com/users', {
  2.   name: 'John',
  3.   age: 30
  4. })
  5. .then(response => console.log('创建成功:', response.data))
  6. .catch(error => console.error('创建失败:', error));
复制代码
3. 其他哀求方法
  1. axios.put('https://api.example.com/users/1', { name: 'Alice' });
  2. axios.delete('https://api.example.com/users/1');
  3. axios.patch('https://api.example.com/users/1', { age: 31 });
复制代码
4.Axios 设置

1. 全局默认设置
  1. axios.defaults.baseURL = 'https://api.example.com';
  2. axios.defaults.headers.common['Authorization'] = 'Bearer token';
  3. axios.defaults.timeout = 5000; // 5秒超时
复制代码
2. 单个哀求设置
  1. axios.get('/data', {
  2.   params: { id: 123 }, // URL 参数
  3.   headers: { 'X-Custom-Header': 'value' }, // 自定义请求头
  4.   timeout: 3000, // 单独设置超时时间
  5.   responseType: 'json' // 响应数据类型(默认json)
  6. });
复制代码
5.处置惩罚相应

1. 相应数据布局
  1. {
  2.   data: {},      // 服务器返回的数据
  3.   status: 200,   // HTTP 状态码
  4.   statusText: 'OK',
  5.   headers: {},    // 响应头
  6.   config: {}      // 请求的配置信息
  7. }
复制代码
2. 提取数据
  1. axios.get('/data')
  2.   .then(response => {
  3.     const data = response.data;
  4.     const status = response.status;
  5.   });
复制代码
6.错误处置惩罚

1. 捕获 HTTP 错误状态码(4xx/5xx)
  1. axios.get('/data')
  2.   .catch(error => {
  3.     if (error.response) {
  4.       // 服务器返回了错误状态码
  5.       console.log('状态码:', error.response.status);
  6.       console.log('错误数据:', error.response.data);
  7.     } else if (error.request) {
  8.       // 请求已发送但无响应
  9.       console.log('无响应:', error.request);
  10.     } else {
  11.       // 其他错误(如配置错误)
  12.       console.log('错误信息:', error.message);
  13.     }
  14.   });
复制代码
2. 全局错误拦截
  1. axios.interceptors.response.use(
  2.   response => response,
  3.   error => {
  4.     if (error.response.status === 404) {
  5.       alert('资源不存在!');
  6.     }
  7.     return Promise.reject(error);
  8.   }
  9. );
复制代码
7.高级功能

1. 并发哀求
  1. const request1 = axios.get('/data1');
  2. const request2 = axios.get('/data2');
  3. axios.all([request1, request2])
  4.   .then(axios.spread((res1, res2) => {
  5.     console.log(res1.data, res2.data);
  6.   }));
复制代码
2. 取消哀求
  1. const controller = new AbortController();
  2. axios.get('/data', {
  3.   signal: controller.signal
  4. }).catch(error => {
  5.   if (axios.isCancel(error)) {
  6.     console.log('请求被取消:', error.message);
  7.   }
  8. });
  9. // 取消请求
  10. controller.abort('用户取消操作');
复制代码
3. 自界说实例
  1. const api = axios.create({
  2.   baseURL: 'https://api.example.com',
  3.   timeout: 5000
  4. });
  5. api.get('/users'); // 使用自定义实例
复制代码
8.文件上传
  1. const formData = new FormData();
  2. formData.append('file', fileInput.files[0]);
  3. axios.post('/upload', formData, {
  4.   headers: {
  5.     'Content-Type': 'multipart/form-data'
  6.   },
  7.   onUploadProgress: progressEvent => {
  8.     const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100);
  9.     console.log(`上传进度: ${percent}%`);
  10.   }
  11. });
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表