首页 > 其他分享 >vue3 如何封装aixos

vue3 如何封装aixos

时间:2024-12-31 22:57:14浏览次数:3  
标签:aixos Axios 封装 vue3 token error data response

封装 Axios 可以帮助我们更好地管理 HTTP 请求,例如添加统一的基础 URL、请求头、拦截器等功能。
下面是封装 Axios 的一个示例,以及如何在 Vite 项目中使用它来请求数据。
首先,创建一个新的 JavaScript 文件,比如 http.js 或 axiosInstance.js,并在其中配置 Axios 实例:

// src/http.js

import axios from 'axios';

// 创建一个新的 axios 实例
const instance = axios.create({
  baseURL: 'https://api.example.com', // 设置基础 URL
  timeout: 5000, // 设置超时时间
  headers: {'Content-Type': 'application/json'}
});

// 添加请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么,例如添加 token 到请求头
    const token = localStorage.getItem('token'); // 示例:从本地存储获取 token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response.data; // 返回实际的数据而不是整个响应对象
  },
  error => {
    // 对响应错误做点什么
    if (error.response.status === 401) {
      // 处理未授权的情况
      // 可能需要重定向到登录页面或者其他操作
    }
    return Promise.reject(error);
  }
);

export default instance;

使用封装后的 Axios

接下来,在你的 Vue 组件或其他地方使用这个封装好的 Axios 实例:

 // src/views/MyComponent.vue

<template>
  <div>
    <button @click="fetchData">Fetch Data</button>
    <pre>{{ data }}</pre>
  </div>
</template>

<script>
import axiosInstance from '@/http'; // 引入封装好的 axios 实例

export default {
  data() {
    return {
      data: null,
    };
  },
  methods: {
    async fetchData() {
      try {
        const response = await axiosInstance.get('/endpoint'); // 替换为你的 API 端点
        this.data = response;
      } catch (error) {
        console.error("Failed to fetch data:", error);
      }
    },
  },
};
</script>

在这个例子中,我们在 MyComponent.vue 中定义了一个按钮,点击后会触发 fetchData 方法,该方法通过封装好的 Axios 实例发起请求,并将返回的数据展示出来。

注意事项

  • 确保在 Vue 项目中正确配置了路径别名或相对路径,以便正确导入封装好的 Axios 实例。
  • 根据实际的需求调整 Axios 的配置和拦截器逻辑。
  • 如果你在生产环境中遇到跨域问题,请确保服务器设置了正确的 CORS 头。

通过这种方式,你可以方便地管理和复用 HTTP 请求代码,并且可以根据需要轻松地添加额外的功能,如身份验证和错误处理。

标签:aixos,Axios,封装,vue3,token,error,data,response
From: https://blog.csdn.net/qq_16242613/article/details/144859051

相关文章

  • 【C#随笔】封装一下NativeMemory类
    终于,主播也是用上博客园了,可喜可贺来博客园不能不发文章,所以主播没事干先发个一篇看看实力.NET6的时候引入了一个新类,叫NativeMemory,里面提供了AllocFree等方法作为malloc和free的包装想当年我写非托管内存的时候都是Marshal类起手,居然写了这么久才发现早就有了这玩意,那不得封......
  • uniapp请求封装-token无感刷新
    当前是vue3+ts版本的封装vue3+js版本请求封装可参考https://www.cnblogs.com/lovejielive/p/14343619.htmltoken无感刷新,可自行删除requset.ts中ts相关数据恢复vue2版本先在目录下创建utils和common这2个文件夹utils是存放工具类的,common用来放置常用方法的之后......
  • 说说Vue2.0与Vue3.0双向数据绑定有什么区别?
    Vue2.0与Vue3.0在双向数据绑定上的主要区别体现在响应式系统的实现方式和性能优化方面。以下是具体的分析:一、响应式系统实现方式Vue2.0:Vue2.0通过Object.defineProperty()方法实现双向数据绑定。它会对每一个数据属性进行劫持,通过定义getter和setter来追踪数据的变化。然而,这......
  • Vue2.0和Vue3.0的初始化有什么区别?
    Vue2.0和Vue3.0在初始化方面存在若干显著区别。以下是对这些区别的详细分析:初始化结构目录:Vue2.0:传统的初始化结构目录,通常包括项目根目录下的配置文件(如webpack的配置文件)。Vue3.0:引入了新的初始化结构,需要在项目根目录下手动创建不同环境的配置文件。这些配置文件的名称由......
  • vue3.0新增了哪些内置组件和方法?
    Vue3.0在前端开发中新增了一些内置组件和方法,它们为开发者提供了更多的功能和灵活性。以下是对这些新增内容的清晰归纳:一、新增内置组件:Fragment:在Vue2中,组件必须有一个根标签。然而,在Vue3中,这一限制被取消,组件可以没有根标签。Vue3会将多个标签包含在一个名为Fragm......
  • Vue2.0和Vue3.0的生命周期有什么区别?
    Vue2.0和Vue3.0的生命周期存在显著的区别,主要体现在生命周期钩子的数量、命名以及使用方式上。以下是对两者区别的详细归纳:一、Vue2.0的生命周期Vue2.0的生命周期包括八个主要的钩子函数,分别是:beforeCreate:在实例初始化之后,数据观测和事件配置之前被调用。created:在实例创建......
  • 使用Vue2写的项目如何升级为Vue3?需要考虑哪些因素?
    使用Vue2写的项目升级为Vue3是一个涉及多个步骤和考虑因素的过程。以下是一个清晰的升级指南,包括必要的步骤和需要考虑的因素:升级步骤备份项目:在开始升级之前,创建项目的完整备份,以防升级过程中出现问题。更新依赖:使用包管理器(如npm或yarn)更新Vue.js核心库到Vue3版本。同......
  • 将复杂数据类型封装在字符串中
    希望得到一个数组或对象的字符串表示,以便存储在一个文件或数据库中。使用serialize()将变量及其值编码为一种文本形式://定义一个数组,其中包含食品名称作为键,食品数量作为值$pantry=array('sugar'=>'2lbs.','butter'=>'3sticks');//尝试以写入模式('w')打开一个名为'......
  • Vue3 中数组和字符串的处理
    原因:想要在网页文本框中输入一个整型数组,用作Set去重测试。遇到问题:网页文本框中输入的一串内容是字符串格式的,暂且称之为“数组字符串”。解决方式:先把“数组字符串”转换成“字符串数组”格式,再转换为“整型数组”格式。定义变量首先定义一些用到的变量:数组字......
  • Vue3使用EasyOFD.js实现ofd文件自定义展示
    EasyOFD.js——一个在web端展示ofd文件的控件,该控件基于CANVAS绘制。官网提供的事例,不适合用于多页ofd文件的展示,本文基于EAYSOFD实现放大、缩小、页面跳转以及多页滚动等功能1、安装EAYSOFD依赖和EASYOFD组件//依赖npmijszipx2jsjb2opentype.js//本程序npmieasyofd......