Axios拦截器

在前端开发中,与后端API交互是日常工作中不可或缺的一部分。无论是处理认证、统一错误提示,还是记录请求日志,这些重复性任务往往会让代码变得臃肿且难以维护。今天,我将分享一个提升API请求处理效率的神器——Axios拦截器。

1. 什么是Axios拦截器?

Axios是一个基于Promise的HTTP客户端,广泛用于Vue和React项目中。拦截器是Axios的核心功能之一,它允许我们在请求发送前和响应返回后插入自定义逻辑。换句话说,拦截器就像一个守门员,所有进出的请求和响应都必须经过它。

拦截器的两大核心功能:

  • 请求拦截器:在请求发送到服务器之前修改请求配置。

  • 响应拦截器:在响应返回客户端之前处理数据或错误。

2. 场景一:全局添加认证Token

在需要用户登录的系统中,几乎每个API请求都需要携带认证Token。手动在每个请求中添加Token显然低效且容易出错。通过拦截器,我们可以实现自动添加Token:

JavaScript

复制

import axios from 'axios';

// 创建Axios实例
const api = axios.create({
  baseURL: 'https://api.example.com'
});

// 请求拦截器:自动添加Token
api.interceptors.request.use(config => {
  const token = localStorage.getItem('userToken');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

export default api;

现在,所有通过api实例发送的请求都会自动携带认证信息,无需重复代码。

3. 场景二:统一处理HTTP错误

API请求失败时,错误处理逻辑通常分散在各个地方。通过响应拦截器,我们可以集中处理错误:

JavaScript

复制

// 响应拦截器:统一错误处理
api.interceptors.response.use(
  response => response,  // 成功时直接返回
  error => {
    const { status } = error.response;
    if (status === 401) {
      // 未认证,跳转到登录页
      window.location.href = '/login';
    } else if (status === 403) {
      // 权限不足,提示用户
      alert('您没有权限访问此资源');
    } else if (status === 500) {
      // 服务器错误,记录日志
      console.error('服务器错误:', error.response.data);
    }
    return Promise.reject(error);
  }
);

这种集中式错误处理不仅减少了重复代码,还让错误逻辑更加清晰。

4. 场景三:加载状态管理

在发送请求时显示加载动画,在请求完成或失败时隐藏加载动画,是提升用户体验的常见需求。通过拦截器,我们可以轻松实现这一点:

JavaScript

复制

// 全局状态管理
let pendingRequests = 0;

// 请求拦截器:显示加载状态
api.interceptors.request.use(config => {
  pendingRequests++;
  if (pendingRequests === 1) {
    showLoading();  // 显示加载动画
  }
  return config;
});

// 响应拦截器:隐藏加载状态
api.interceptors.response.use(
  response => {
    pendingRequests--;
    if (pendingRequests === 0) {
      hideLoading();  // 隐藏加载动画
    }
    return response;
  },
  error => {
    pendingRequests--;
    if (pendingRequests === 0) {
      hideLoading();
    }
    return Promise.reject(error);
  }
);

通过计数器pendingRequests,我们能准确控制加载动画的显示和隐藏,避免动画闪烁问题。

5. 场景四:API请求日志记录

在开发和调试阶段,记录API请求和响应数据是排查问题的重要手段。拦截器可以帮助我们快速实现日志记录:

JavaScript

复制

// 请求拦截器:记录请求信息
api.interceptors.request.use(config => {
  console.log('🚀 请求发送:', {
    url: config.url,
    method: config.method,
    headers: config.headers,
    data: config.data
  });
  return config;
});

// 响应拦截器:记录响应信息
api.interceptors.response.use(
  response => {
    console.log('✅ 响应成功:', {
      status: response.status,
      data: response.data
    });
    return response;
  },
  error => {
    console.error('❌ 请求失败:', {
      status: error.response?.status,
      message: error.message
    });
    return Promise.reject(error);
  }
);

这种日志记录方式特别适合团队协作,能快速定位问题。

6. 注意事项:拦截器的限制

  • 异步操作需谨慎:如果在拦截器中执行异步操作(如刷新Token),需要确保返回的是Promise,否则可能导致请求失败。

  • 避免循环依赖:多个拦截器之间可能产生依赖冲突,建议将核心逻辑集中管理。

  • 性能优化:过多的拦截器会增加请求延迟,仅在必要时使用。

总结

Axios拦截器是前端开发者提升API交互效率的秘密武器。通过集中处理认证、错误、加载状态和日志记录,我们不仅能减少重复代码,还能让项目结构更加清晰。下次遇到API相关问题时,不妨试试用拦截器解决,或许能让你事半功倍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值