Vue封装Axios完全指南

一、Vue封装Axios请求

Vue封装Axios请求是指在Vue项目中,将Axios进行二次封装,以便于在项目中快速使用和管理请求。具体步骤如下:

Step 1: 在src目录下创建一个http.js文件用于封装Axios。


import axios from 'axios'

axios.defaults.timeout = 10000 // http请求超时时间

axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      return Promise.resolve(response)
    } else {
      return Promise.reject(response)
    }
  },
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        case 401:
          router.replace({
            path: '/login',
            query: { redirect: router.currentRoute.fullPath }
          })
          break
        case 403:
          Vue.toasted.error('登陆状态已过期,请重新登录!')
          localStorage.removeItem('userInfo')
          setTimeout(() => {
            router.replace({
              path: '/login',
              query: { redirect: router.currentRoute.fullPath }
            })
          }, 1000)
          break
        case 404:
          Vue.toasted.error('请求不存在!')
          break
      }
      return Promise.reject(error.response)
    }
  }
)

export default axios

Step 2: 在main.js中导入并配置Axios。


import Vue from 'vue'
import App from './App.vue'
import router from './router'
import axios from './http' // 导入二次封装的Axios

Vue.prototype.$axios = axios // 将二次封装的Axios挂载到Vue原型上,以便于全局使用

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

Step 3: 在组件中使用二次封装的Axios。


export default {
  data() {
    return {
      userList: []
    }
  },
  mounted() {
    this.getUserList()
  },
  methods: {
    getUserList() {
      this.$axios.get('/api/userList').then(res => {
        this.userList = res.data
      })
    }
  }
}

二、Vue封装Axios所有方法

Vue封装Axios所有方法是指在Vue项目中,将Axios的所有方法进行封装,以便于在项目中快速使用和管理请求。具体步骤如下:

Step 1: 在src目录下创建一个http.js文件用于封装Axios。


import axios from 'axios'

axios.defaults.timeout = 10000 // http请求超时时间

// 封装请求拦截器
axios.interceptors.request.use(
  config => {
    // 在发送请求前添加token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = 'Bearer ' + token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 封装响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      if (response.data.code === 401) {
        // 登录状态失效,重新登录
        localStorage.removeItem('token')
        window.location.href = '/'
      } else {
        return Promise.resolve(response)
      }
    } else {
      return Promise.reject(response)
    }
  },
  error => {
    return Promise.reject(error.response)
  }
)

export default {
  get(url, params) {
    return new Promise((resolve, reject) => {
      axios.get(url, { params })
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  },
  post(url, data) {
    return new Promise((resolve, reject) => {
      axios.post(url, data)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  },
  put(url, data) {
    return new Promise((resolve, reject) => {
      axios.put(url, data)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  },
  delete(url, params) {
    return new Promise((resolve, reject) => {
      axios.delete(url, { params })
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }
}

Step 2: 在main.js中导入并配置Axios。


import Vue from 'vue'
import App from './App.vue'
import router from './router'
import http from './http' // 导入封装后的Axios

Vue.prototype.$http = http // 将封装后的Axios挂载到Vue原型上,以便于全局使用

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

Step 3: 在组件中使用封装后的Axios。


export default {
  data() {
    return {
      userList: []
    }
  },
  mounted() {
    this.getUserList()
  },
  methods: {
    async getUserList() {
      try {
        const res = await this.$http.get('/api/userList')
        this.userList = res.data
      } catch (error) {
        console.log(error)
      }
    }
  }
}

三、Vue封装Axios面试题

以下是一些常见的Vue封装Axios的面试题及其答案。

1、为什么要封装Axios?

答:封装Axios可以使代码更加简洁、优雅,提高代码重用率和可维护性;同时也可以对请求进行统一拦截和处理,方便管理。

2、如何合理拦截Axios请求?

答:可以将请求拦截器封装在http.js文件中,通过添加token和请求头,对请求进行拦截和处理,同时也可以设置请求超时时间。可以将响应拦截器封装在http.js文件中,对响应进行拦截和处理,包括登录状态失效、返回状态码等各种情况的处理。

3、怎么在Axios中添加请求头?

答:可以在请求拦截器中添加请求头,具体代码如下:


axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = 'Bearer ' + token
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

4、怎么在Axios中上传文件?

答:可以使用FormData,将文件封装成一个FormData对象,通过调用post方法上传,具体代码如下:


let formData = new FormData()
formData.append('file', e.target.files[0])
this.$axios.post('/api/upload', formData)

四、Vue封装Axios数据请求及调用

在Vue项目中,使用封装好的Axios进行数据请求和调用非常简单。我们可以在组件中调用封装好的Axios方法,从服务器获取数据,以便于后续的使用和渲染。具体步骤如下:

Step 1: 在组件中调用Axios方法。


export default {
  data() {
    return {
      userList: []
    }
  },
  mounted() {
    this.getUserList()
  },
  methods: {
    async getUserList() {
      try {
        const res = await this.$http.get('/api/userList')
        this.userList = res.data
      } catch (error) {
        console.log(error)
      }
    }
  }
}

Step 2: 在模板中渲染数据。

ID 姓名 年龄 邮箱
{{ item.id }} {{ item.name }} {{ item.age }} {{ item.email }}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/271982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-17 00:07
下一篇 2024-12-17 00:07

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 运维Python和GO应用实践指南

    本文将从多个角度详细阐述运维Python和GO的实际应用,包括监控、管理、自动化、部署、持续集成等方面。 一、监控 运维中的监控是保证系统稳定性的重要手段。Python和GO都有强…

    编程 2025-04-29
  • Python应用程序的全面指南

    Python是一种功能强大而简单易学的编程语言,适用于多种应用场景。本篇文章将从多个方面介绍Python如何应用于开发应用程序。 一、Web应用程序 目前,基于Python的Web…

    编程 2025-04-29
  • Python wordcloud入门指南

    如何在Python中使用wordcloud库生成文字云? 一、安装和导入wordcloud库 在使用wordcloud前,需要保证库已经安装并导入: !pip install wo…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python小波分解入门指南

    本文将介绍Python小波分解的概念、基本原理和实现方法,帮助初学者掌握相关技能。 一、小波变换概述 小波分解是一种广泛应用于数字信号处理和图像处理的方法,可以将信号分解成多个具有…

    编程 2025-04-29
  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • Python初学者指南:第一个Python程序安装步骤

    在本篇指南中,我们将通过以下方式来详细讲解第一个Python程序安装步骤: Python的安装和环境配置 在命令行中编写和运行第一个Python程序 使用IDE编写和运行第一个Py…

    编程 2025-04-29
  • Python起笔落笔全能开发指南

    Python起笔落笔是指在编写Python代码时的编写习惯。一个好的起笔落笔习惯可以提高代码的可读性、可维护性和可扩展性,本文将从多个方面进行详细阐述。 一、变量命名 变量命名是起…

    编程 2025-04-29
  • FusionMaps应用指南

    FusionMaps是一款基于JavaScript和Flash的交互式地图可视化工具。它提供了一种简单易用的方式,将复杂的数据可视化为地图。本文将从基础的配置开始讲解,到如何定制和…

    编程 2025-04-29

发表回复

登录后才能评论