axios之http请求
发布日期:2021-05-18 09:37:29 浏览次数:22 分类:精选文章

本文共 1701 字,大约阅读时间需要 5 分钟。

Axios 拦截器实用指南

一、Axios 拦截器简介

Axios 拦截器是一种在HTTP 请求和响应处理过程中,可以自定义操作的机制。它由两个部分组成:请求拦截器和响应拦截器。通过这些拦截器,我们可以在请求发送之前或在数据返回后对数据进行加工或状态管理。

二、请求拦截器的功能

请求拦截器主要用于处理发送请求时的逻辑操作,常见的包括:

  • 添加公共参数:例如添加 token、用户ID等对于API调用必不可少的授权信息。
  • loading弹窗效果:在请求发送之前显示loading提示,提升用户体验。
  • 参数处理:对请求参数进行格式化处理,例如对POST请求的数据进行URL编码。
  • 三、响应拦截器的功能

    响应拦截器则用于处理返回数据后的逻辑操作,主要常见场景包括:

  • 格式化响应数据:将返回数据转换为更易处理的格式。
  • 异常处理:对接收到的错误信息进行处理,并提供友好的用户反馈。
  • 自定义业务逻辑:在数据返回后扩展其他业务流程。
  • 四、拦截器的核心实现

    在实际项目中,拦截器的实现通常包括以下几个步骤:

  • 安装axios插件并创建拦截器
  • import axios from 'axios'; // 创建请求拦截器axios.interceptors.request.use((config) => {    // 示例:从 localStorage 获取 token    const token = localStorage.getItem('token');    if (token) {        config.headers.Authorization = `Bearer ${token}`;    }    return config;});
    1. 处理响应数据
    2. axios.interceptors.response.use((response) => {    // 示例:清除loading弹窗    // 其他处理逻辑    return response;});

      五、实际应用示例

      基于以上理论,以下是项目中常见的拦截器实现场景:

      1. 获取用户授权信息

      // 加载用户信息const user = JSON.parse(localStorage.getItem('user'));if (user) {    axios.defaults.headers.common['Authorization'] = `Bearer ${user.token}`;}

      2. dizzy loading 弹窗

      axios.interceptors.request.use((config) => {    constiyim = localStorage.getItem('ismu');    if (iyim === '1') {        config.headers.Authorization = 'Bearer ' +onnement;        Toast.loading({            message: '加载中...'        });    }    return config;});

      3. 错误处理

      axios.interceptors.response.use((error) => {    if (error.response.status === 401) {        localStorage.removeItem('token');        // 调整页面状态        return null;    } else {        showErrorToast(error.message);        // 其他处理逻辑    }});

      六、优化建议

    3. 减少代码复杂度:避免过多嵌套,保持逻辑清晰。
    4. 统一处理异常:确保不同错误类型都有相应的处理方式。
    5. 及时清除loading弹窗:避免长时间加载导致用户体验下降。
    6. 通过合理运用axios拦截器,可以显著提升项目的用户体验和数据处理的统一性,实现更稳健的网络请求管理。

    上一篇:jQuery的整理
    下一篇:微信小程序注意点

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月30日 17时06分59秒