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日

相关文章

  • Vue2 cube-ui时间选择器详解

    Vue2 cube-ui时间选择器详解 概述 Cube-UI是基于Vue.js的组件库,其中包含了丰富的UI组件,提高了开发效率。其中,时间选择器是其中一个常用组件之一,本文将详解如何使用Cube-UI的时间选择器组件。 安装 要使用Cube-UI的时间选择器,我们需要先安装Cube-UI。使用npm安装: npm install cube-ui -S 使用…

    Vue 2023年5月28日
    00
  • vue中的for循环以及自定义指令解读

    下面我会详细地讲解一下 “Vue中的For循环以及自定义指令解读”。 Vue中的For循环 Vue提供了v-for指令,我们可以通过它循环遍历数据列表,同时将每个元素渲染成一个view。 v-for指令可以使用 in 或 of 运算符,具体取决于对象或数组的语法。这里我们以数组为例,展示v-for如何工作。 基本用法 v-for可以通过以下方式,遍历数组: …

    Vue 2023年5月29日
    00
  • Vue路由this.route.push跳转页面不刷新的解决方案

    首先,对于Vue路由中通过this.route.push方法跳转页面后不刷新的问题,可以采用使用this.$router.go(0)重新加载当前页面的方式来解决。具体解决方法如下: 在需要刷新页面的Vue组件中,可以使用mounted钩子函数来实现页面数据的重新获取和渲染,例如: <template> <div> <h2>…

    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源码之关于vm.$delete()/Vue.use()内部原理详解

    Vue源码之关于vm.$delete()/Vue.use()内部原理详解 Vue.$delete()方法 在Vue中,我们可以使用vm.$delete()方法从Vue实例或嵌套对象中删除响应式属性。这个方法是私有的,也就是说它只存在于Vue内部,并没有对外暴露。下面我们来详细讲解一下Vue.$delete()方法的内部原理。 源码解析 Vue.$delete…

    Vue 2023年5月28日
    00
  • Vue项目代码之路由拆分、Vuex模块拆分、element按需加载详解

    我来为你详细讲解“Vue项目代码之路由拆分、Vuex模块拆分、element按需加载详解”的完整攻略。 路由拆分 当我们的项目变得越来越复杂时,路由也会变得越来越庞大。为了更好地维护我们的代码,我们可以考虑将路由进行拆分。 首先,我们可以在项目根目录下新建一个router文件夹,用来存放路由相关的文件。接着,我们可以在这个文件夹下新建一个index.js文件…

    Vue 2023年5月27日
    00
  • vue将毫秒数转化为正常日期格式的实例

    下面是Vue将毫秒数转化为正常日期格式的实例的完整攻略。 1. 需求背景 有时候我们需要在项目中把毫秒数转化为正常的日期格式。比如我们有一个后端接口返回的时间戳是一个13位的毫秒数,我们需要把它转化为正常的日期格式方便用户查看。 2. 数字转化为日期 在Vue中,我们可以使用Date对象和moment.js库将数字转化为日期。 2.1 使用Date对象转化为…

    Vue 2023年5月29日
    00
  • 详解如何使用vue和electron开发一个桌面应用

    以下是详解如何使用vue和electron开发一个桌面应用的完整攻略: 1. 准备工作 首先需要安装Node.js和npm,然后使用npm安装vue-cli和electron: npm install -g vue-cli npm install -g electron 2. 创建一个基础的Vue项目 在命令行输入vue init webpack my-el…

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