Vue二次封装axios流程详解

yizhihongxing

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中的插值( Interpolation)语法

    下面是“详解VUE中的插值(Interpolation)语法”的攻略: 1. 什么是插值语法? 插值是一种模板引擎语法,用于将数据绑定到文本或属性中。在Vue中,插值语法可以用双大括号{{}}来表示,可以在HTML文本中任意使用。 例如,在Vue模板中,我们可以使用插值语法将data数据绑定到html标签中: <div> {{message}} …

    Vue 2023年5月27日
    00
  • vue3使用flv.js播放推流视频的示例代码

    下面是关于“vue3使用flv.js播放推流视频的示例代码”的完整攻略: 1. 大体思路 首先,我们需要了解一下使用 FLV.js 播放推流视频的思路。 推流视频一般使用推送协议,如 RTMP,这种协议一般是使用 Flash 直播内核来推送。而 FLV.js 是一个基于浏览器的 FLV 视频播放器,可以使用它来播放推流视频。 具体来说,在 Vue 组件中,我…

    Vue 2023年5月28日
    00
  • vue项目中使用bpmn-自定义platter的示例代码

    下面我将详细讲解如何在Vue项目中使用BPMN自定义platter的完整攻略。 准备工作 首先,我们需要在Vue项目中安装相应的依赖项。打开终端(Terminal),进入到Vue项目的根目录下,然后执行以下命令: npm install bpmn-js bpmn-moddle bpmn-js-properties-panel 这三个依赖项分别是: bpmn-…

    Vue 2023年5月28日
    00
  • vue-cli3.X快速创建项目的方法步骤

    Vue CLI 是 Vue.js 官方提供的一个脚手架工具,它可以帮助我们快速搭建一个 vue 项目,同时提供了很多优秀的插件,比如 vue-router、vuex 等。本文将介绍使用 Vue CLI 3.X 创建项目的详细步骤。 安装 Vue CLI 3.X 首先我们需要安装 Vue CLI 3.X,安装命令如下: npm install -g @vue/…

    Vue 2023年5月27日
    00
  • JS动态增删表格行的方法

    下面是详细讲解“JS动态增删表格行的方法”的完整攻略。 动态增加表格行 步骤一:创建表格 我们首先需要在页面上创建一个表格,可以采用以下标准的HTML代码来创建一个包含表格头部的表格: <table> <thead> <tr> <th>姓名</th> <th>年龄</th> …

    Vue 2023年5月28日
    00
  • vue.js数据绑定的方法(单向、双向和一次性绑定)

    Vue.js是一款流行的JavaScript框架,提供多种数据绑定方法,包括单向绑定、双向绑定和一次性绑定。本文将详细介绍这些方法的原理和使用方法,以及提供两个示例进行说明。 单向绑定 单向绑定是指数据只能从数据模型流向视图,不能反过来。Vue.js通过一个指令v-bind实现单向绑定。该指令的基本语法为:v-bind:属性名=”data” 下面是一个简单的…

    Vue 2023年5月27日
    00
  • vue实现PC端录音功能的实例代码

    Vue实现PC端录音功能的实例代码需要通过JS录音库来实现,常用的开源录音库有Recorder.js和RecordRTC,这两个库都可以用于Vue项目的录音。 下面是实现步骤及示例代码: 步骤一:安装录音库 使用npm安装Recorder.js或RecordRTC npm install recorderjs npm install recordrtc 步骤…

    Vue 2023年5月28日
    00
  • vue中的inject学习教程

    关于“vue中的inject学习教程”的完整攻略,我们可以分为以下几个部分进行讲解: 一、inject的作用 inject 是在 Vue.js 上层组件向其下层子组件注入数据的方式。它支持我们在子组件中访问父组件的数据,不管层级有多深,而不需要一层层通过 prop 或事件来传递。因此,inject 及其衍生出的 provide 可以在一定程度上解决跨组件之间…

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