Vue二次封装axios流程详解

Vue二次封装axios流程详解

在Vue项目中,我们通常会使用axios进行网络请求。为了提高开发效率和代码复用性,我们可以对axios进行二次封装,使其更贴合项目需求。下面将详细讲解Vue二次封装axios的流程。

步骤一:创建axios实例

我们先在一个标准的Vue项目中安装axios库,然后在src目录下新建utils文件夹,用于存放我们的axios实例封装及其他工具函数。在该文件夹下新建request.js文件,用于创建axios实例。示例代码如下:

import axios from 'axios'

const baseURL = '/api'

const instance = axios.create({
  baseURL,
  timeout: 10000
})

export default instance

上面代码中,我们创建了一个名为instance的axios实例,同时设置了请求的baseURL(将所有请求的URL前缀都设置成/api),以及请求的超时时间timeout设为10秒。

步骤二:封装请求方法

在前面创建的axios实例下,我们需要把常用的请求方法封装起来,方便调用和管理。通常会包括get、post、put、delete等RESTful风格的常用方法。同时,我们也可以设置拦截器,对请求和响应进行处理,包括请求头添加、响应数据预处理、错误处理等。示例代码如下:

import instance from './request'
import { Message } from 'element-ui'

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

instance.interceptors.response.use(
  res => {
    if (res.data.code === 200) return res.data
    Message.error(res.data.message)
    return Promise.reject(res)
  }, error => {
    Message({
      message: error.response.data.message || error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default {
  get (url, params) {
    return instance.get(url, {
      params
    })
  },
  post (url, data) {
    return instance.post(url, data)
  },
  put (url, data) {
    return instance.put(url, data)
  },
  delete (url, data) {
    return instance.delete(url, {
      data
    })
  }
}

上面代码中,我们利用axios提供的拦截器功能,对请求和响应进行处理。在请求拦截器中,我们添加了Authorization请求头,从localStorage中获取token。在响应拦截器中,我们对成功和失败的请求做了不同的处理,对响应数据进行预处理,并统一处理了错误信息。

步骤三:引入请求方法

通过步骤二的封装,我们现在就已经可以在项目中使用二次封装的axios请求方法了。我们只需要在需要使用axios的地方引入封装好的请求方法即可。示例代码如下:

import request from '@/utils/request'

export function getUserInfo () {
  return request.get('/user/info')
}

export function login (username, password) {
  return request.post('/login', { username, password })
}

上面代码中,我们在请求用户信息和登录接口的位置引入二次封装的axios请求方法,分别使用get和post方法进行请求。这样做的好处是,在获取用户信息和登录接口等地方引入二次封装的请求方法,可以有效地复用代码,降低维护成本。

示例一:请求头中添加token

在步骤二的代码实现中,我们在请求拦截器中添加了Authorization请求头,从localStorage中获取了token。在下面的示例中,我们演示了如何在发送请求时,自动在请求头中带上token。

import axios from 'axios'

const baseURL = '/api'

const instance = axios.create({
  baseURL,
  timeout: 10000
})

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

async function getUserInfo () {
  try {
    const res = await instance.get('/user/info')
    console.log(res)
  } catch (e) {
    console.error(e)
  }
}

getUserInfo()

上面代码中,我们在getUserInfo函数中使用了二次封装的axios请求方法,由于我们在请求拦截器中添加了Authorization请求头,因此该请求头会自动附在请求headers中。

示例二:预处理响应数据

在步骤二的代码实现中,我们在响应拦截器中对响应数据进行了预处理,并处理了错误信息。在下面的示例中,我们演示了如何在发送请求后,直接获取到处理过的响应信息。

import request from '@/utils/request'

async function getUserInfo () {
  try {
    const res = await request.get('/user/info')
    console.log(res)
  } catch (e) {
    console.error(e)
  }
}

getUserInfo()

上面代码中,我们使用了步骤三中的getUserInfo函数,该函数中调用了getUserInfo请求方法,并处理了请求成功和请求失败的情况。这样,在使用的时候我们无需再次去处理请求的结果和错误信息,直接用try...catch语句即可获取到处理过的响应信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue二次封装axios流程详解 - Python技术站

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

相关文章

  • Vue render深入开发讲解

    下面我将详细介绍“Vue render深入开发讲解”的完整攻略。 什么是Vue的render函数? Vue的render函数是用于构建虚拟DOM的函数。它接收一个createElement函数作为参数,然后利用这个函数构建一个虚拟DOM并返回。这个虚拟DOM会作为Vue的模板编译结果,最终渲染到页面上。 render函数的基本用法 render函数的基本用法…

    Vue 2023年5月28日
    00
  • 从0到1构建vueSSR项目之node以及vue-cli3的配置

    我来详细讲解一下“从0到1构建Vue SSR项目之Node以及Vue CLI3的配置”这个话题。 总体流程 从0到1构建Vue SSR项目,其总体流程如下: 初始化项目 安装必要的依赖 配置webpack 配置Vue SSR 编写Vue SSR相关代码 启动项目 接下来,我将逐步详细讲解这个过程。 初始化项目 首先,我们需要使用Vue CLI 3进行项目初始…

    Vue 2023年5月28日
    00
  • 深入理解基于vue-cli的webpack打包优化实践及探索

    深入理解基于vue-cli的webpack打包优化实践及探索 为什么需要优化打包? Vue.js 是一个非常出色的前端框架,但是在开发的过程中,仍然会出现打包过慢、开发体验跟不上等问题。这些问题是由 webpack 打包产生的,而优化打包就是为了解决这些问题。优化打包的好处不仅仅是快速的编译速度,更使得我们的生产环境下的加载速度加快,提高了用户的体验。 如何…

    Vue 2023年5月28日
    00
  • 关于vue3中的reactive赋值问题

    Vue3中的reactive函数是实现响应式原理的重要工具,它会将对象转化成响应式的对象(Reactive Object),并返回该响应式对象的代理对象(Proxy),这个代理对象会拦截响应式对象的访问和修改,从而实现数据驱动视图的效果。在使用Vue3的开发过程中,我们需要注意一些关于reactive对象赋值的问题。 关于赋值的问题 在Vue3中使用reac…

    Vue 2023年5月29日
    00
  • Vue中四种操作dom方法保姆级讲解

    下面我就为你详细讲解一下“Vue中四种操作dom方法保姆级讲解”的攻略。 1. Vue中的DOM操作 在Vue中,我们可以通过四种方法操作DOM元素,这四种方法分别是:插入、更新、删除和替换。下面我们就来仔细看看这四种方法。 2. 插入一个DOM元素 我们可以利用Vue提供的v-html指令或{{}}插值语法插入一个DOM元素。以v-html指令为例,它可以…

    Vue 2023年5月27日
    00
  • 详解Vue 单文件组件的三种写法

    下面是“详解Vue 单文件组件的三种写法”的完整攻略: 1. 什么是Vue单文件组件? Vue组件是Vue应用程序的最小组成部分,单文件组件是指一个.vue文件中包含了模板、脚本和样式。 使用单文件组件可以提高代码的可维护性和重用性,方便团队协作和组件化开发。 2. Vue单文件组件的三种写法 2.1. 使用template标签 这种写法是最基本和最容易上手…

    Vue 2023年5月28日
    00
  • vue实现周日历切换效果

    接下来我会详细讲解如何用vue实现周日历切换效果。 前置知识 在学习如何用vue实现周日历切换效果之前,需要掌握以下技术: HTML基础知识 CSS基础知识 JavaScript基础知识 Vue.js基础知识 实现步骤 步骤一:创建日历组件 我们可以通过vue-cli来创建新的项目,然后使用vue组件创建我们的日历组件。通过组件,我们可以灵活地控制日历的显示…

    Vue 2023年5月29日
    00
  • Vue+element自定义指令如何实现表格横向拖拽

    让我为你详细讲解“Vue+element自定义指令如何实现表格横向拖拽”的完整攻略。 什么是自定义指令? 自定义指令是Vue.js提供的一个强大的特性,它可以让我们在模板中自定义一些行为,比如手动绑定事件或者操作DOM元素。自定义指令在实现特定功能时是非常有用和方便的。 横向拖拽指令的实现 我们可以结合Vue和element框架来实现表格的横向拖拽功能。具体…

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