Axios 详解与利用指南 [复制链接]
发表于 2026-2-8 21:19:17 | 显示全部楼层 |阅读模式

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

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

×
Axios 详解与利用指南

1. Axios 简介

Axios 是一个基于 Promise 的 HTTP 客户端,可以大概在欣赏器和 Node.js 环境中运行。它提供了一种轻便的方式来实验 HTTP 哀求,并支持多种哀求方法,如 GET、POST、PUT、DELETE 等。Axios 的设置机动,支持哀求和相应拦截器、取消哀求、并发哀求处置惩罚等功能,使其成为当代 Web 开辟中非常盛行的选择。
2. Axios 特性


  • 基于 Promise:Axios 完全支持 Promise,使得异步操纵更加直观,特殊是在利用 async/await 时。
  • 支持多种哀求方式:支持常见的 HTTP 哀求方法,满意差异的哀求需求。
  • 欣赏器与 Node.js 兼容:Axios 可同时在前端和后端项目中利用。
  • 拦截器:提供哀求和相应拦截器,允许在哀求或相应到达之进步行处置惩罚。
  • 自动转换 JSON 数据:自动将 JSON 数据转换为 JavaScript 对象。
  • 哀求取消:支持通过 CancelToken 取消哀求。
  • 并发哀求处置惩罚:支持 axios.all 等方法,处置惩罚多个并发哀求。
3. Axios 安装与引入

3.1 利用 npm 安装
  1. npm install axios
复制代码
3.2 利用 Yarn 安装
  1. yarn add axios
复制代码
3.3 在项目中引入

在 ES6 模块化的项目中利用:
  1. import axios from 'axios';
复制代码
大概在 CommonJS 模块化的项目中利用:
  1. const axios = require('axios');
复制代码
4. Axios 根本利用

4.1 GET 哀求
  1. axios.get('/api/user', {
  2.   params: {
  3.     ID: 12345
  4.   }
  5. })
  6. .then(response => {
  7.   console.log(response.data);
  8. })
  9. .catch(error => {
  10.   console.error(error);
  11. });
复制代码
4.2 POST 哀求
  1. axios.post('/api/user', {
  2.   firstName: 'John',
  3.   lastName: 'Doe'
  4. })
  5. .then(response => {
  6.   console.log(response.data);
  7. })
  8. .catch(error => {
  9.   console.error(error);
  10. });
复制代码
4.3 并发哀求
  1. function getUser() {
  2.   return axios.get('/api/user');
  3. }
  4. function getProfile() {
  5.   return axios.get('/api/profile');
  6. }
  7. axios.all([getUser(), getProfile()])
  8. .then(axios.spread((user, profile) => {
  9.   console.log('User:', user.data);
  10.   console.log('Profile:', profile.data);
  11. }))
  12. .catch(error => {
  13.   console.error(error);
  14. });
复制代码
5. Axios 设置项

5.1 全局设置

Axios 提供了全局设置,允许您设置默认的哀求活动。您可以通过 axios.defaults 来设置全局设置,这些设置会应用到每个哀求中。
  1. axios.defaults.baseURL = 'https://api.example.com';
  2. axios.defaults.timeout = 10000;
  3. axios.defaults.headers.common['Authorization'] = 'Bearer token';
  4. axios.defaults.headers.post['Content-Type'] = 'application/json';
复制代码
5.2 哀求设置

在发送哀求时,可以通过设置对象自界说哀求活动。这些设置项包罗但不限于以下内容:

  • url:哀求的 URL,默以为哀求的相对路径。
  • method:哀求方法,如 get、post 等,默认值为 get。
  • baseURL:将自动加在 url 前面,除非 url 是一个绝对 URL。
  • headers:自界说哀求头。
  • params:GET 哀求的 URL 参数,PUT、POST 哀求的 data 会自动序列化为查询字符串。
  • data:PUT、POST、PATCH 哀求的哀求体。
  • timeout:哀求超时设置(毫秒),如果哀求超时,将触发 timeout 错误。
  • responseType:返回的数据格式,如 json、blob、document、arraybuffer、text、stream。
  • withCredentials:体现跨域哀求时是否必要利用凭据,默以为 false。
  1. const config = {
  2.   // 请求的 URL
  3.   url: '/api/user',
  4.   // 请求方法
  5.   method: 'get', // 可以是 'get', 'post', 'put', 'delete', 'patch', 'options', 'head'
  6.   // 基础 URL,将自动加在 `url` 前面
  7.   baseURL: 'https://api.example.com',
  8.   // 自定义请求头
  9.   headers: {
  10.     'Content-Type': 'application/json',
  11.     'Authorization': 'Bearer token',
  12.     'X-Custom-Header': 'foobar'
  13.   },
  14.   // URL 参数
  15.   params: {
  16.     ID: 12345
  17.   },
  18.   // POST、PUT、PATCH 请求的请求体
  19.   data: {
  20.     firstName: 'John',
  21.     lastName: 'Doe'
  22.   },
  23.   // 请求超时设置(毫秒)
  24.   timeout: 5000, // 超时时间设置为5秒
  25.   // 响应的数据类型
  26.   responseType: 'json', // 选项有 'json', 'blob', 'document', 'arraybuffer', 'text', 'stream'
  27.   // `transformRequest` 允许在请求数据发送到服务器之前对其进行修改
  28.   // 该函数只适用于请求方法 'PUT', 'POST', 'PATCH'
  29.   transformRequest: [(data, headers) => {
  30.     // 对 data 进行任意转换处理
  31.     data.firstName = data.firstName.toUpperCase();
  32.     return JSON.stringify(data);
  33.   }],
  34.   // `transformResponse` 允许在响应数据传递给 then 或 catch 之前对其进行修改
  35.   transformResponse: [(data) => {
  36.     // 对 data 进行任意转换处理
  37.     data = JSON.parse(data);
  38.     data.fullName = `${data.firstName} ${data.lastName}`;
  39.     return data;
  40.   }],
  41.   // 是否跨站点访问控制请求,默认为 false
  42.   withCredentials: false,
  43.   // 自定义参数序列化
  44.   paramsSerializer: params => {
  45.     return new URLSearchParams(params).toString();
  46.   },
  47.   // 取消请求
  48.   cancelToken: new axios.CancelToken(cancel => {
  49.     // 在请求的执行过程中,可调用 `cancel` 函数来取消请求
  50.     // 示例:cancel('Request canceled by the user.');
  51.   }),
  52.   // 验证状态码是否合法,返回 true 表示合法
  53.   validateStatus: status => {
  54.     return status >= 200 && status < 300; // 默认的合法范围是 200-299
  55.   },
  56.   // 自定义处理上传进度事件
  57.   onUploadProgress: progressEvent => {
  58.     console.log('Upload progress:', progressEvent.loaded);
  59.   },
  60.   // 自定义处理下载进度事件
  61.   onDownloadProgress: progressEvent => {
  62.     console.log('Download progress:', progressEvent.loaded);
  63.   }
  64. };
  65. // 发送请求
  66. axios(config)
  67.   .then(response => {
  68.     console.log('Response:', response.data);
  69.   })
  70.   .catch(error => {
  71.     console.error('Error:', error);
  72.   });
复制代码
5.3 哀求与相应数据转换

在 Axios 中,可以通过设置 transformRequest 和 transformResponse 来对哀求数据和相应数据举行转换。这两个设置项分别是哀求前和相应后实验的数组函数,数组中的每个函数都会依次实验。
  1. axios.post('/api/user', {
  2.   firstName: 'John',
  3.   lastName: 'Doe'
  4. }, {
  5.   transformRequest: [(data, headers) => {
  6.     // 在发送请求前,您可以对 data 进行自定义处理
  7.     data.firstName = data.firstName.toUpperCase();
  8.     return JSON.stringify(data);
  9.   }],
  10.   transformResponse: [(data) => {
  11.     // 在响应到达客户端之前,您可以对 data 进行自定义处理
  12.     data = JSON.parse(data);
  13.     data.fullName = `${data.firstName} ${data.lastName}`;
  14.     return data;
  15.   }]
  16. })
  17. .then(response => {
  18.   console.log(response.data);
  19. })
  20. .catch(error => {
  21.   console.error(error);
  22. });
复制代码
5.4 异步与同步哀求

Axios 默认是异步哀求,基于 Promise。通过 async/await,您可以将异步哀求写成同步代码的情势:
  1. async function getUser() {
  2.   try {
  3.     const response = await axios.get('/api/user');
  4.     console.log(response.data);
  5.   } catch (error) {
  6.     console.error(error);
  7.   }
  8. }
  9. getUser();
复制代码
5.5 哀求取消

Axios 提供了取消哀求的功能,通过 CancelToken 来实现。您可以在必要取消哀求时,调用 cancel 方法。
  1. const CancelToken = axios.CancelToken;
  2. let cancel;
  3. axios.get('/api/user', {
  4.   cancelToken: new CancelToken(function executor(c) {
  5.     cancel = c;
  6.   })
  7. })
  8. .then(response => {
  9.   console.log(response.data);
  10. })
  11. .catch(error => {
  12.   if (axios.isCancel(error)) {
  13.     console.log('Request canceled', error.message);
  14.   } else {
  15.     console.error(error);
  16.   }
  17. });
  18. // 取消请求
  19. cancel('Operation canceled by the user.');
复制代码
6. Axios 拦截器

6.1 哀求拦截器

哀求拦截器可以在哀求发送前对其举行处置惩罚。比方,您可以在每次哀求前自动添加 token:
  1. axios.interceptors.request.use(config => {
  2.   config.headers.Authorization = 'Bearer token';
  3.   return config;
  4. }, error => {
  5.   return Promise.reject(error);
  6. });
复制代码
6.2 相应拦截器

相应拦截器可以在服务器相应到达客户端前对其举行处置惩罚。比方,您可以同一处置惩罚错误信息:
  1. axios.interceptors.response.use(response => {
  2.   return response;
  3. }, error => {
  4.   if (error.response.status === 401) {
  5.     console.error('未授权,请登录');
  6.   }
  7.   return Promise.reject(error);
  8. });
复制代码
注意:在利用拦截器时,必须确保拦截器函数有 return。否则,拦截器处置惩罚后的结果无法通报给下一个拦截器或终极的哀求/相应处置惩罚。
7. 在项目中的封装与利用

7.1 封装 Axios 实例

在大型项目中,通常会封装 Axios 实例来处置惩罚通用设置和拦截器。
  1. import axios from 'axios';
  2. const apiClient = axios.create({  baseURL: 'https://api.example.com',  timeout: 10000,  headers: {    'Content-Type': 'application/json',    'Authorization': 'Bearer token'  }});// 哀求拦截器apiClient.interceptors.request.use(config => {  // 在发送哀求前可以做一些处置惩罚  return config;}, error => {  return Promise.reject(error);});// 相应拦截器apiClient.interceptors.response.use(response => {  // 在相应到达客户端前可以做一些处置惩罚  return response.data;}, error => {  return Promise.reject(error);});export default apiClient;
复制代码
7.2 处置惩罚接口与错误

在封装的 Axios 实例中,可以界说通用的错误处置惩罚逻辑,确保应用步调中的全部 API 哀求都具有同等的错误处置惩罚方式。
  1. apiClient.interceptors.response.use(response => {
  2.   return response;
  3. }, error => {
  4.   // 自定义错误处理
  5.   const { status } = error.response;
  6.   switch (status) {
  7.     case 401:
  8.       console.error('未授权,请重新登录');
  9.       break;
  10.     case 404:
  11.       console.error('请求资源未找到');
  12.       break;
  13.     default:
  14.       console.error('请求错误', error.message);
  15.   }
  16.   return Promise.reject(error);
  17. });
复制代码


7.3 根本利用

在这个根本上,可以封装常见的 API 哀求方法,比如 GET、POST、PUT、DELETE 等,提供更简便的接口。
  1. const api = {
  2.   get(url, params = {}, config = {}) {
  3.     return apiClient.get(url, {
  4.       params,
  5.       ...config
  6.     });
  7.   },
  8.   post(url, data = {}, config = {}) {
  9.     return apiClient.post(url, data, config);
  10.   },
  11.   put(url, data = {}, config = {}) {
  12.     return apiClient.put(url, data, config);
  13.   },
  14.   delete(url, params = {}, config = {}) {
  15.     return apiClient.delete(url, {
  16.       params,
  17.       ...config
  18.     });
  19.   }
  20. };
  21. export default api;
复制代码


7.4 通用方法
  1. const http = function(config) {
  2.         return apiClient(config)
  3. };
  4. export default http;
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

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