概述
在使用 Axios 发送 HTTP 请求时,有时候我们需要在请求发送前或响应接收后执行一些额外的操作。Axios 提供了拦截器(Interceptors)功能来帮助我们实现这一需求。
拦截器分为两种类型:请求拦截器和响应拦截器。通过设置这些拦截器,我们可以统一处理诸如添加认证信息、记录日志、转换数据格式等任务。
创建和使用拦截器
添加拦截器
请求拦截器
请求拦截器允许我们在请求被发送之前对其进行修改。可以使用 axios.interceptors.request.use 方法添加请求拦截器。该方法接受两个参数:一个用于处理成功的请求,另一个用于处理出错的请求。
-- -------------------- ---- -------
-------------------------------
-------- -- -
-- ----------
------------------------------- - ------- - - -----------
------ -------
--
------- -- -
-- ----------
------ ----------------------
-
--响应拦截器
响应拦截器允许我们在接收到响应之后对其进行修改。可以使用 axios.interceptors.response.use 方法添加响应拦截器。同样地,该方法也接受两个参数:一个用于处理成功的响应,另一个用于处理出错的响应。
-- -------------------- ---- -------
--------------------------------
---------- -- -
-- ----------
------ --------------
--
------- -- -
-- ----------
-- ---------------------- --- ---- -
-------------------- - ---------
-
------ ----------------------
-
--移除拦截器
当我们不再需要某个拦截器时,可以通过其返回值来移除它。每个拦截器在添加时都会返回一个 ID,这个 ID 可以用来移除对应的拦截器。
-- -------------------- ---- ------- ----- -------------------- - --------------------------------------- -- - ------------------------------- - ------- - - ----------- ------ ------- --- -- ------- ------------------------------------------------------- ----- --------------------- - ------------------------------------------ -- - ------ -------------- --- -- ------- ---------------------------------------------------------
实际应用示例
示例 1:添加认证头
假设我们的应用需要在所有请求中都包含一个认证头,我们可以这样做:
function addAuthHeader(config) {
config.headers['Authorization'] = 'Bearer ' + getToken();
return config;
}
axios.interceptors.request.use(addAuthHeader);示例 2:全局错误处理
为了确保所有的错误都被正确捕获并处理,我们可以添加一个响应拦截器:
-- -------------------- ---- -------
-------- ------------------- -
-- --------------- -- --------------------- --- ---- -
-------------------- - ---------
- ---- -
----------------- ---------- ----- ----------- -------
-
------ ----------------------
-
------------------------------------- --------------注意事项
- 拦截器会作用于所有的 Axios 请求。因此,在设计拦截器时,请确保它们不会对非预期的请求产生负面影响。
- 如果你需要为特定的请求单独处理,可以在创建请求时传入自定义的配置对象,而不是依赖全局拦截器。
- 当应用卸载或者某些组件销毁时,记得移除不必要的拦截器以避免内存泄漏。
通过上述内容,我们可以看到,Axios 的拦截器为我们提供了一种非常灵活的方式来处理请求和响应,使得我们的前端代码更加简洁和可维护。