Axios 拦截器允许我们在请求或响应被 then
或者 catch
处理之前对它们进行拦截和修改。拦截器通常用于以下几个目的:
- 在请求发送到服务器之前对请求数据进行修改。
- 发送请求前,在请求头中附加认证信息(如JWT令牌)。
- 在请求到达服务器之前取消请求。
- 统一处理所有的响应错误。
- 在响应数据到达应用逻辑之前对数据进行转换。
使用 Axios 拦截器主要有两种类型:请求拦截器和响应拦截器。
添加请求拦截器
请求拦截器会在请求真正发送出去之前执行。以下是添加请求拦截器的一般方法:
javascript// 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么,例如设置token config.headers.Authorization = `Bearer ${YOUR_AUTH_TOKEN}`; return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); });
在这里,我们首先使用 axios.interceptors.request.use
添加了一个请求拦截器。这个拦截器接收两个函数作为参数,第一个函数会在请求发出前被调用,并接收请求的配置对象 config
作为参数,允许我们修改这个配置对象。在上面的例子中,我们添加了一个 Authorization
头,其值是一个假设的认证令牌 YOUR_AUTH_TOKEN
。第二个函数是当请求出现错误时执行,这里我们简单地将错误返回。
添加响应拦截器
响应拦截器会在服务器的响应数据到达 then
或 catch
之前被调用。以下是添加响应拦截器的一般方法:
javascript// 添加响应拦截器 axios.interceptors.response.use(function (response) { // 对响应数据做点什么 // 可以根据你的需求来对响应数据做处理,这里只是一个示例 if (response.data && response.data.success) { return response.data.data; } else { // 你可以在这里处理不成功的情况,或者抛出一个错误 return Promise.reject('Error with request'); } }, function (error) { // 对响应错误做点什么 if (error.response.status === 401) { // 如果状态码是 401,可以进行重新登录等处理 } return Promise.reject(error); });
在这个例子中,我们使用 axios.interceptors.response.use
添加了一个响应拦截器。它也接收两个函数,第一个函数在响应正确返回时被调用,接收响应对象 response
作为参数。在这个函数中,我们做了一些简单的判断,并只返回了实际需要的数据部分。第二个函数在响应出现错误时被调用,例如可以在这里处理 401 Unauthorized
状态码,实现自动重新登录或者跳转到登录页面等操作。
移除拦截器
如果你想在某个时刻移除拦截器,你可以这样做:
javascript// 添加拦截器时会返回一个拦截器的ID const myInterceptor = axios.interceptors.request.use(function () {/*...*/}); // 通过这个ID可以移除拦截器 axios.interceptors.request.eject(myInterceptor);
在上面的代码中,我们首先添加了一个请求拦截器,并将返回的拦截器 ID 保存在 myInterceptor
变量中。然后,我们调用 axios.interceptors.request.eject
方法并传入这个 ID 来移除拦