Axios请求,如何设置拦截器?如何创建新axios实例?
发布于 作者:苏南大叔 来源:程序如此灵动~

过往提及axios
,总是和jquery
放在一起讨论。没错,jquery
的$.get()
和$.post()
,确实和axios.get()
和axios.post()
非常相似。细节上来说,axios
确实有改进的地方。但是,并不是弃用jquery
的理由。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0
,chrome@
131.0.6778.140`。
引入axios
众所周知,axios
在浏览器环境下,和在纯node
环境下,都是可以使用的。而jquery
的ajax
相关功能,就只能在纯浏览器环境下使用。
纯node
环境
浏览器环境
可以使用cdn
地址,也可以自行引入axios.js
。
或者
简单使用
简单的.get
和.post
,非常简单。前面文章也提过好几次了。值得注意的是:两者传递参数的方式略有不同,get
是两个参数,放在第二个的params
里面。post
是三个参数,放在第二个参数里。两者的params
都会构成queryparams
,放在url
的后面。
如果这种简单代码够用,接下来的axios
内容也不用看了。

拦截器
这个axios
拦截器的功能,可以显著区分其它竞品。拦截器的目标,并不是拦截。而是对发出去的内容,和收回来的内容,进行批量定制。这和express
的中间件,是非常类似的。
拦截器也可以定义很多个,可以反复.request.use()
或者.response.use()
。不过,苏南大叔觉得,拦截一次就够了。没有啥太特别的逻辑可以写啊...
拦截request
首先,它可以拦截request
(官方代码里面叫做config
),例如:
请求的时候,发生错误。那就是代码写错了吧?这是可以预见的情况吧。所以,拦截这个请求错误的概率还是很低的。
拦截response
其次,还可以拦截response
,例如:
这里的error.response.status === 401
,就是后续文章的伏笔。这种状态码,称之为401未授权。
全局修改配置
上面两个例子,都是全局设置拦截器的代码。实际上还可以全局修改配置信息(参考下面的例子)。
实例化
为啥要对axios
进行实例化呢?
目的就是区分不同的axios
设置。比如设置了不同的baseUrl
或者timeout
,或者有不同的拦截器需求。
所以,新的axios
实例,就意味着一个新的配置组合出炉。但是也很有可能是没有这个需求的。

同样这个实例也可以单独配置拦截器。参考代码:
相关文章
- https://newsn.net/say/js-fetch.html
- https://newsn.net/say/node-promise.html
- https://newsn.net/say/js-promise-catch.html


