前端架构带你 封装axios,一次封装终身受益「美团后端连连点赞」

基本上可以保证你能应付面试官关于JS的提问
摘要由CSDN通过智能技术生成

前言(为何做)

过去的一段时间,我都认为 接口请求 封装是前端的必修课。 只要是写过生产环境前端代码的人,应该都脱离不了异步接口请求,那么 接口请求 的 封装 是必经之路。

直到前些天,我们屋某个美团写后台的小姑娘问我前端问题时。我才发现她们代码中的 接口请求 ,都是没有任何的封装,直接采用以下方式进行:

axios.post(`/api/xxxx/xxxx?xxx=${xxx}`, { ...data })
.then((result) => {if (result.errno) {....} else {....}
})
.catch((err) => {....
}) 

这样写也不是说不好,在某种程度上,这增加了代码的可读性。但是我们大多数页面需要的接口都不止一个,那么我们的组件中极有可能出现 数十上百 行重复代码。

那么随着请求的体量越来越大,我们的项目便越来越难以维护。

效果演示

const [e, r] = await api.getUserInfo(userid)
if (!e && r) this.userInfo = r.data.userinfo 

上面是我们最终的实现效果。

接下来,我将带大家一步一步封装一套属于我们自己的 接口请求工具 ,同时也希望大家分享更好的思路。

注:

  • 如果你希望直接看源码,请翻到 《完整代码》
  • 这里以 axios 作示范,同样换成 fetch 、 小程序的 request 都是可以的
  • 我将会采用 typeScript 书写这段教程,如果你不需要,忽略掉对应的类型即可

思路清晰,先说分析(做什么)

在我们正式开发前,首先需要清楚请求一个接口都做了什么。

为此,消耗了两个小时时间,做了一个请求流程图,以便于我们后续进行需求分析(小声bb:Processon真难用 😢)

有了一个清晰的请求流程图,我们便可以区分出来两块重要的内容来进行拆分: 基础请求流程拦截器

接下来我们将两块儿内容展开讲。

基础请求流程

基础请求流程,我们大致可以分为三块, 一是 请求进入请求拦截前 、二是 真正发起的请求 、三是 请求从响应拦截出来后

这其中可以归为两类,一类是 针对单独接口的处理二类是 针对所有接口需要的内容

  • 针对单独接口的处理* 请求前的参数处理* 请求后的返回值处理
  • 针对所有接口的处理* Post* Get* Put* Del

拦截器

拦截器,我们大致可以分为两类, 一类是 请求接口前的统一处理(请求拦截) 、 一类是 请求接口后的统一处理(响应拦截)

  • 请求拦截* 请求调整* 用户标识
  • 响应拦截* 网络错误处理* 授权错误处理* 普通错误处理* 代码异常处理

统一调用

随着我们的 Api 越来越多,我们可能需要给他们不同的分类,但我们并不希望每次调用都从不同的文件夹引入不同的 Api ,因此在 基础请求 + 拦截器 之外,我们还需要一个封包操作。

开发顺序

随着我们要做的内容越来越多,我们希望它有一个顺序以便于我们按部就班的开发(相信大家对开发中出现的不确定性都深恶痛绝)。以便于我们按照流程,无意外、无惊喜 的完成此次封装。

在我们的开发中,我们基本要遵循先处理通用内容在处理个性化内容的逻辑:

1.针对所有接口的处理(Get)
2.请求拦截
3.响应拦截
4.针对单独接口的处理
5.封包处理
6.针对所有接口的处理(Post、Put、Del)

tips

💡 这里大家可能意外为什么 Post、P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。前端二次封装axios是指在axios的基础上进行二次封装,以便更好地适应项目需求。这样可以提高代码的复用性和可维护性,同时也可以减少代码的冗余。常见的二次封装包括添加请求拦截器、响应拦截器、统一错误处理等。 ### 回答2: 前端二次封装Axios是指在Axios的基础上进行进一步封装,以便更好地满足项目需求、简化代码逻辑、提高开发效率。下面是300字的回答: 前端二次封装Axios是一种常见的开发技术,通过对Axios进行二次封装,我们可以更好地处理接口请求、统一处理错误、管理请求拦截器和响应拦截器等。首先,我们可以封装一些通用的配置项,如设置默认请求头、设置请求超时时间等,以便在每次发起请求时不用重复设置这些配置。我们可以创建一个统一的请求拦截器,用来在每次请求前进行一些预处理操作,比如添加token,或者在请求头中添加某些参数。 接下来,我们可以创建一个响应拦截器,用来统一处理后端返回的数据和错误信息。在处理返回数据时,我们可以进行一些通用的处理,如格式化数据、判断返回状态码是否正常等。在处理错误信息时,我们可以根据后端返回的错误码,进行相应的处理操作,例如统一显示错误提示信息、针对某些特定的错误码进行特殊处理。 此外,我们还可以将一些通用的接口请求进行进一步的封装,以便在不同的模块中使用更加便捷。例如,对于某个需要鉴权的接口,我们可以封装一个方法,在其中添加鉴权逻辑,以保证只有登陆用户才能调用该接口。 通过前端二次封装Axios,我们可以更好地管理接口请求,简化代码逻辑,提高开发效率。当需求发生变化时,我们只需修改封装的代码,而不用在项目中的每个地方都去做相应的修改。同时,该封装也有利于统一规范接口请求、统一处理错误,增加了代码的维护性和可读性。总而言之,前端二次封装Axios是一种有效的方式,让我们在项目开发中更加高效、便捷地进行接口请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值