【愚公系列】《循序渐进Vue.js 3.x前端开发实践》053-Axios 实用功能介绍

举报
愚公搬代码 发表于 2025/03/30 17:27:13 2025/03/30
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容 .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎 👍点赞、✍评论、⭐收藏

🚀前言

在现代 web 应用开发中,数据的获取与处理是至关重要的环节。随着 API 的广泛应用,如何高效、便捷地进行网络请求,成为了开发者面临的一大挑战。Axios 作为一个基于 Promise 的 HTTP 客户端,因其简洁的 API 和强大的功能而受到广泛欢迎。它不仅支持浏览器和 Node.js 环境,还提供了丰富的功能,帮助开发者轻松处理各种网络请求。

本篇文章将深入探讨 Axios 的实用功能,帮助你全面了解这一强大工具的各种使用场景。我们将从 Axios 的基本用法入手,逐步介绍其在请求和响应拦截、请求取消、并发请求、响应数据转换等方面的高级功能。通过具体的代码示例和详细的解释,你将能够迅速掌握 Axios 的核心特性,并将其灵活应用于你的项目中。

在此过程中,我们还会讨论一些最佳实践,以帮助你优化网络请求的效率和用户体验,包括如何处理错误、设置请求的默认配置和管理请求的生命周期等。无论你是刚刚接触 Axios 的开发者,还是希望深入挖掘其潜力的经验人士,这篇文章都将为你提供实用的指导和灵感。

🚀一、Axios 实用功能介绍

🔎1.通过配置的方式进行数据请求

Axios 提供了许多快捷的请求方法,使得发起 HTTP 请求变得更加简单。在第 11.1 节中,我们编写的请求示例代码中使用的就是这些快捷方法。下面是一些常见的快捷请求方法:

  1. GET 请求

    axios.get(url[, config])
    
    • url:请求的接口地址。
    • config:可选参数,用于配置请求的额外选项。
  2. POST 请求

    axios.post(url[, data[, config]])
    
  3. DELETE 请求

    axios.delete(url[, config])
    
  4. HEAD 请求

    axios.head(url[, config])
    
  5. OPTIONS 请求

    axios.options(url[, config])
    
  6. PUT 请求

    axios.put(url[, data[, config]])
    
  7. PATCH 请求

    axios.patch(url[, data[, config]])
    

除了使用这些快捷方法之外,我们也可以通过自定义配置进行数据请求,示例代码如下:

let city = "上海";
city = encodeURI(city);
let api = `/simpleWeather/query?city=${city}&key=cffe158caf3fe63aa2959767a503xxxx`;

axios({
  method: 'get',
  url: "/myApi" + api,
}).then((response) => {
  console.log(response.data);
});

使用上述配置进行的数据请求效果与使用快捷方法一致。需要注意的是,在配置时必须设置请求的 method 方法。

🦋1.1 创建 Axios 实例

在同一个项目中,通常会使用到许多相似的请求配置。为了简化这一过程,可以创建一个新的 Axios 请求实例,示例代码如下:

// 创建 Axios 实例,统一配置 URL 前缀、超时时间和自定义的 header
const instance = axios.create({
  baseURL: '/myApi',
  timeout: 1000,
  headers: {'X-Custom-Header': 'custom'}
});

let city = "上海";
city = encodeURI(city);
let api = `/simpleWeather/query?city=${city}&key=cffe158caf3fe63aa2959767a503xxxx`;

instance.get(api).then((response) => {
  console.log(response.data);
});

🦋1.2 重设 Axios 默认配置

如果需要让某些配置作用于所有请求,可以使用 Axios 的 defaults 属性进行配置:

axios.defaults.baseURL = '/myApi';

let city = "上海";
city = encodeURI(city);
let api = `/simpleWeather/query?city=${city}&key=cffe158caf3fe63aa2959767a503xxxx`;

axios.get(api).then((response) => {
  console.log(response.data);
});

🦋1.3 配置优先级

在对请求配置进行合并时,会按照以下优先级进行选择:

  1. Axios 默认配置
  2. defaults 属性配置
  3. 请求时的 config 参数配置

🔎2.请求的配置与响应数据结构

🦋2.1 Axios 请求配置对象

在 Axios 中,无论是使用配置的方式进行数据请求,还是使用快捷方法,都可以传递一个配置对象来对请求进行详细配置。该配置对象的参数非常丰富,如下表所示:

表 11-1 配置对象可配置的参数

参数 类型 说明 默认值
url 字符串 设置请求的接口 URL 无
method 字符串 设置请求方法 ‘get’
baseURL 字符串 设置请求的接口前缀,会拼接在 URL 前面 无
transformRequest 函数 拦截请求并修改数据,此函数会传入 data 参数,返回修改后的数据 无
transformResponse 函数 拦截请求回执并修改数据,此函数会传入 data 参数,返回修改后的数据 无
headers 对象 自定义请求头 无
paramsSerializer 函数 自定义参数的序列化方法 无
data 字符、对象、数组等 设置请求体要发送的数据 无
timeout 数值 设置请求的超时时间(单位为毫秒),若设置为 0,则永不超时 无
withCredentials 布尔值 设置跨域请求时是否需要凭证 false
auth 对象 设置用户信息(如用户名和密码) 无
responseType 字符串 设置响应数据的数据类型(如 ‘json’) ‘json’
responseEncoding 字符串 设置响应数据的编码方式 ‘utf8’
maxContentLength 数值 设置允许响应的最大字节数 无
maxBodyLength 数值 设置请求内容的最大字节数 无
validateStatus 函数 自定义请求结束的状态,返回布尔值决定请求是否成功 (status) => status >= 200 && status < 300

🦋2.2 Axios 返回的 Promise 对象

当一个请求被发出后,Axios 会返回一个 Promise 对象。通过此 Promise 对象,可以异步地等待数据返回。Axios 返回的数据是一个包装好的对象,包含以下属性:

表 11-2 包装的属性

属性 类型 说明
data 对象 接口服务返回的响应数据对象
status 数值 接口服务返回的 HTTP 状态码
statusText 字符串 接口服务返回的 HTTP 状态信息
headers 对象 响应头数据
config 对象 Axios 设置的请求配置信息

读者可以尝试在浏览器中打印这些数据,观察其中的信息,以便更好地理解 Axios 的工作机制。

🔎3.拦截器的使用

🦋3.1 请求拦截器

请求拦截器允许开发者在请求发起之前,对请求进行修改或者添加一些定制化的逻辑。比如,可以在请求开始时展示页面的 Loading 效果,或者记录请求的日志信息。

示例代码:请求拦截器

axios.interceptors.request.use(
  (config) => {
    // 请求开始时触发
    alert("请求将要开始");
    return config;  // 必须返回 config,否则请求无法继续
  },
  (error) => {
    // 请求出错时触发
    alert("请求出现错误");
    return Promise.reject(error);  // 返回错误,继续抛出
  }
);

axios.get(api).then((response) => {
  console.log(response.data);
});

在上面的代码中,axios.interceptors.request.use() 方法用于添加请求拦截器。拦截器的第一个函数会在请求发送前执行,第二个函数会在请求错误时执行。

请求拦截器的常见应用

  • 在请求发送前,激活 Loading 效果。
  • 在请求头中添加认证信息(如 Authorization)。
  • 记录请求的日志。

🦋3.2 响应拦截器

响应拦截器则是在请求完成后,接收到响应之前进行拦截。开发者可以在这个阶段对响应数据进行处理,比如修改响应数据格式、处理错误等。

示例代码:响应拦截器

axios.interceptors.response.use(
  (response) => {
    // 请求成功,响应处理
    alert(`响应状态: ${response.status}`);
    return response;  // 返回响应数据
  },
  (error) => {
    // 请求失败,错误处理
    alert("请求失败");
    return Promise.reject(error);  // 返回错误,继续抛出
  }
);

在这个例子中,axios.interceptors.response.use() 方法用于添加响应拦截器。第一个函数会在接收到响应数据时执行,第二个函数会在响应失败时执行。

响应拦截器的常见应用

  • 检查服务器返回的状态码,如果有错误(如 401 未授权),自动跳转到登录页面。
  • 处理返回的数据格式,如统一封装响应数据,简化后续调用。
  • 弹出错误提示,通知用户请求失败。

🦋3.3 移除拦截器

在某些情况下,我们可能不再需要某个拦截器,可以通过 eject 方法移除它。

示例代码:移除请求拦截器

let i = axios.interceptors.request.use(
  (config) => {
    alert("请求将要开始");
    return config;
  },
  (error) => {
    alert("请求出现错误");
    return Promise.reject(error);
  }
);

// 移除请求拦截器
axios.interceptors.request.eject(i);

这里的 eject() 方法可以用来移除某个拦截器,参数是拦截器的引用(即 i)。这样,当你不再需要请求拦截器时,可以将其删除,避免影响后续请求。

🦋3.4 小结

通过使用 axios 的拦截器,我们可以在请求发起前或响应返回后,添加一些定制化的处理逻辑,例如:

  • 请求拦截器:处理请求前的 Loading 效果、设置请求头信息等。
  • 响应拦截器:处理返回数据、错误处理和统一封装等。

同时,使用 eject() 方法可以在不需要时移除拦截器,灵活控制拦截行为。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。