当前位置: 首页 > article >正文

如何封装一个axios,封装axios有哪些好处

什么是Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于在浏览器和 Node.js 中发送异步网络请求。它简化了发送 GETPOSTPUTDELETE 等请求的过程,并且支持请求拦截、响应拦截、取消请求和自动处理 JSON 数据等功能。

为什么要封装Axios

封装 Axios 可以统一管理项目中的网络请求,简化代码并提高维护性和可扩展性。通过请求和响应拦截器,我们可以处理鉴权、错误处理等复杂逻辑,同时还能方便地应对不同的网络请求需求。具体来说,封装 Axios 可以带来以下好处:

  • 统一处理请求和响应:集中处理错误、鉴权、日志记录和通用配置。
  • 简化代码:避免在每个模块中重复配置请求头、超时等参数。
  • 提升可维护性:在一个地方集中管理全局配置,便于后续修改和维护。
  • 处理多样需求:实现请求节流、取消重复请求等功能,满足不同场景的需求。

通过这些优化,封装 Axios 能够显著提升项目的整体质量和开发效率。

如何封装Axios

在Vue大型项目中使用Axios,可以按照以下步骤进行:

1. 全局封装Axios

首先,创建一个单独的文件 request.js 来封装 Axios 的全局配置:

import axios from 'axios';

// 创建 Axios 实例
const axiosInstance = axios.create({
  baseURL: process.env.VUE_APP_API_BASE_URL, // 配置基础URL
  timeout: 5000, // 设置超时时间
  headers: { 'Content-Type': 'application/json' }
});

// 请求拦截器
axiosInstance.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`; // 统一添加Authorization头
    }
    return config;
  },
  error => Promise.reject(error)
);

// 响应拦截器
axiosInstance.interceptors.response.use(
  response => response.data,
  error => {
    if (error.response.status === 401) {
      // 处理未授权
    }
    return Promise.reject(error);
  }
);

export default axiosInstance;
2. Vue项目中全局引入Axios

main.js 中全局引入 Axios 封装:

import axiosInstance from './utils/request';

Vue.prototype.$http = axiosInstance;

这样你可以在任意 Vue 组件中使用 this.$http 发起网络请求。

3. 模块化管理API

对于大型项目,将API请求模块化管理,可以在 api 文件夹中按功能模块划分文件:

例如在 api/user.js

import axios from '../utils/request';

export function getUserInfo(params) {
  return axios.get('/user/info', params);
}

export function updateUser(data) {
  return axios.post('/user/update', data);
}
4. 在组件中使用Axios

在组件中直接调用封装好的API方法:

import { getUserInfo } from '@/api/user';export default {
  data() {
    return {
      userInfo: null
    };
  },
  created() {
    const parmas = {
      name: 'admin',
      password: '123456'​
    ​}
    this.fetchUserInfo(parmas ​);
  },
  methods: {
    async fetchUserInfo(params​) {
      try {this.userInfo = await getUserInfo(params​);
      } catch (error) {
        console.error('获取用户信息失败', error);
      }
    }
  }
};

http://www.kler.cn/a/380859.html

相关文章:

  • typora数学符号
  • C++ OpenGL学习笔记(4、绘制贴图纹理)
  • 华为EC6108V9/C 通刷固件包,内含高安版及详细教程
  • 通航飞机(通用航空飞机)的软件关键技术
  • 如何在K8S集群中查看和操作Pod内的文件?
  • 图书借阅管理系统|SpringBoot|HTML|web网站|Java【源码+数据库文件+包部署成功+答疑解惑问到会为止】
  • PHP露营地管理平台小程序系统源码
  • Vue3-hooks代替mixins
  • 20241102在荣品PRO-RK3566开发板使用荣品预编译的buildroot通过iperf2测试AP6256的WIFI网速
  • 【GL09】(算法)卡尔曼滤波
  • HCIA(DHCP服务)
  • C++优选算法七 分治-快排
  • 江协科技STM32学习- P29 实验- 串口收发HEX数据包/文本数据包
  • DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网
  • 大型音频模型:AudioLLMs
  • 深度学习基础知识-编解码结构理论超详细讲解
  • java学习2
  • SPI通信详解-学习笔记
  • 练习LabVIEW第三十九题
  • Prometheus套装部署到K8S+Dashboard部署详解
  • Vue:计算属性
  • Spring 实现异步流式接口
  • jmeter脚本-请求体设置变量and请求体太长的处理
  • Webpack入门教程:从基本概念到优化技巧
  • Vision - 开源视觉分割算法框架 Grounded SAM2 视频推理 教程 (2)
  • K8S简单部署,以及UI界面配置