Vue3 Axios拦截器封装成request文件的示例详解

  1. Vue3 Axios拦截器封装成request文件的示例详解

在Vue3项目中,我们通常会使用Axios来请求数据。为了增强代码的可维护性和重用性,我们可以将Axios的拦截器封装成一个request文件,方便统一管理和调用。下面是示例代码:

request.js

import axios from 'axios';
import { getToken } from '@/utils/auth';

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000,
});

// request拦截器
service.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    if (getToken()) {
      config.headers['Authorization'] = `Bearer ${getToken()}`;
    }
    return config;
  },
  (error) => {
    // 处理请求错误
    console.log(error);
    return Promise.reject(error);
  }
);

// response拦截器
service.interceptors.response.use(
  (response) => {
    // 对响应数据做点什么
    const res = response.data;
    if (res.code !== 20000) {
      console.log('请求异常:', res.message || 'Error');
    } else {
      return res.data;
    }
  },
  (error) => {
    // 处理响应错误
    console.log('请求错误:', error);
    return Promise.reject(error);
  }
);

export default service;

在这个示例中,我们首先import了Axios包和token相关的方法,然后创建了一个axios实例service。接着在这个实例上定义了一个request拦截器和一个response拦截器。在request拦截器中,我们首先判断token是否存在,如果存在则将token添加到请求头中。在response拦截器中,我们对响应数据进行了处理,对于非20000状态码的响应,我们输出了请求异常,并返回一个Promise.reject();对于20000状态码的响应,我们返回了res.data数据。

最后,我们将这个service实例导出,在需要使用Axios的地方只需要import这个文件即可。

使用示例

import request from '@/utils/request';

request({
  url: '/api/user/list',
  method: 'get',
}).then((res) => {
  console.log(res);
});

在使用时,只需要import需要使用的request即可,无需重复代码。

  1. Axios封装文件上传示例

在实际开发中,我们可能需要上传文件,这涉及到FormData的使用。同样,我们可以将Axios的封装和文件上传封装成一个方法,这样方便复用,提高代码的可维护性。下面是示例代码:

utils.js

import request from '@/utils/request';

/**
 * 上传文件
 * @param {FormData} file
 */
export function uploadFile(file) {
  const formData = new FormData();
  formData.append('file', file);
  return request({
    url: '/api/upload/file',
    method: 'post',
    data: formData,
  });
}

在这个示例中,我们首先import了Axios封装,然后定义了一个uploadFile方法。在该方法中,我们创建了一个FormData对象,并向其中添加文件。然后我们使用request方法来发送post请求,并将FormData作为data参数传入。

使用示例

import { uploadFile } from '@/utils/utils';

const file = document.querySelector('input[type="file"]').files[0];
uploadFile(file).then((res) => {
  console.log(res);
});

在使用时,只需要import需要使用的方法即可,无需重复代码。同时,也可以将这个方法进一步封装,比如添加上传进度等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3 Axios拦截器封装成request文件的示例详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue.js基于ElementUI封装了CRUD的弹框组件

    让我来给你详细讲解一下vue.js基于ElementUI封装了CRUD的弹框组件的完整攻略。 简介 CRUD是指增加(Create)、读取(Read)、更新(Update)和删除(Delete),是Web应用程序中最常见的操作,几乎每个网站都会用到。因此,为了提高开发效率,很多框架都提供了CRUD的封装组件,vue.js也不例外。本文主要介绍vue.js基于…

    Vue 2023年5月28日
    00
  • Vue用v-for给src属性赋值的方法

    针对“Vue用v-for给src属性赋值”的问题,可以采用以下两种方法进行实现。 方法一:使用计算属性 计算属性是 Vue 中的一个重要概念,它们可以将表达式封装为一个函数,通过计算得出最终值。使用计算属性可以将 v-for 循环中的数据动态绑定到 img 标签的 src 属性上。 <template> <div> <img v…

    Vue 2023年5月28日
    00
  • vue仿网易云音乐播放器界面的简单实现过程

    下面是使用Vue实现仿网易云音乐播放器界面的简单实现过程的完整攻略: 1. 准备工作 在开始实现过程之前,我们需要准备一些必要的工作。 1.1. 安装必要的依赖 在开始编写代码之前,我们需要安装一些必要的依赖,包括Vue和Vue CLI。如果您还没有安装这些依赖,请按照以下步骤进行安装: 安装Node.js和npm。 在终端中运行以下命令安装Vue CLI:…

    Vue 2023年5月28日
    00
  • Vue学习之组件用法实例详解

    Vue学习之组件用法实例详解 1. 组件的定义与引用 组件是一种抽象的概念,它可以将一些共用的逻辑和界面封装起来,形成一个独立的组件,供其他部分进行复用。在Vue中,组件既可以全局注册,也可以按需注册。 1.1 全局注册组件 全局注册组件是指在Vue实例化之前定义好组件,这样后面的任何Vue实例都可以使用这个组件。 Vue.component(‘compon…

    Vue 2023年5月27日
    00
  • Vue常用实例方法示例梳理分析

    Vue常用实例方法示例梳理分析 Vue是一款流行的JavaScript框架,常用来构建用户界面。在Vue中,实例是Vue的核心概念之一。实例是Vue对象的具体实现,它承载着Vue应用程序相关的数据和方法。在Vue中,实例的创建过程是通过构造函数Vue来完成的。Vue提供了许多实例方法,本篇文章将对常用的Vue实例方法进行梳理分析。 生命周期钩子函数 Vue的…

    Vue 2023年5月28日
    00
  • 详解Vue新增内置组件的使用

    详解Vue新增内置组件的使用 作为一个流行的前端框架,Vue一直在不断地发展和更新。最近,Vue又新增了一些内置组件,这些组件可以方便地实现一些常见的功能,同时也可以提高开发效率。本文将详细介绍Vue新增的内置组件的使用方法,并提供两个实例说明。 Vue新增的内置组件 Vue新增的内置组件有以下几个: <transition>:用于在元素插入或删…

    Vue 2023年5月27日
    00
  • vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)

    当Vue项目返回的数据有含有“\r\n”字符时,在界面上展示可能会出现一些问题。正确的处理方式是将字符串换行进行显示。 解决方案 1. 使用CSS white-space属性 在需要换行的元素上使用CSS white-space属性,将其设置为pre-wrap或者pre-line。这样可以让元素内的文本在包含“\r\n”字符时自动换行并展示。 <tem…

    Vue 2023年5月27日
    00
  • VUE v-for循环中每个item节点动态绑定不同函数的实例

    要实现在VUE v-for循环中每个item节点动态绑定不同函数的实例,可以使用以下步骤: 在每个item节点上绑定一个唯一的key值,以便Vue能够追踪节点的增、删、移动操作。 <ul> <li v-for="(item, index) in items" :key="item.id"> {{…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部