在Vue中是如何封装axios

yizhihongxing

Vue中,axios库通常用于进行网络请求。为了方便代码复用和管理,我们可以将axios进行封装,封装后的axios可以配置全局的拦截器、预设基础路径、统一处理错误响应等。下面是封装axios的完整攻略:

1. 安装axios

在封装axios之前,我们首先需要安装axios库。在项目根目录下打开终端,输入以下命令进行安装:

npm install axios --save

2. 创建axios实例

在Vue应用的入口文件(如main.js)中,我们可以创建一个axios实例,并设置一些默认的配置选项,如请求的基础路径、请求数据格式等。在创建axios实例后,我们可以对其进行全局配置和拦截器的配置等操作。

import axios from 'axios'

const instance = axios.create({
  baseURL: 'http://localhost:3000/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})

export default instance

在上面的代码中,我们通过axios.create()方法创建了一个axios实例,并设置了基础路径为http://localhost:3000/api,超时时间为 10 秒,请求头中的Content-Type为application/json;charset=utf-8

3. 全局配置

在全局配置中,我们可以为axios实例设置一些全局的配置选项,以确保所有请求都能够按照统一的方式进行处理。例如,我们可以设置请求拦截器、响应拦截器、错误处理等。下面是一个全局配置的示例:

import axios from 'axios'
import router from '@/router'
import store from '@/store'

const instance = axios.create({
  baseURL: 'http://localhost:3000/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    config.headers.Authorization = store.state.token
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  })

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    if (response.data.code === 200) {
      return response.data
    } else if (response.data.code === 401) {
      router.push('/login')
    } else {
      return Promise.reject(response.data.msg)
    }
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default instance

在上面的代码中,我们在实例中设置了请求拦截器和响应拦截器。请求拦截器中,我们在发送请求前设置了Authorization请求头,用于传递登录后的Token信息;响应拦截器中,我们对响应数据进行了统一的处理,如判断响应状态码、处理响应数据等。如果响应状态码为200,则返回响应数据;如果状态码为401,则说明用户未登录或登录已失效,需要跳转到登录页面;如果状态码为其他,则抛出错误信息。

4. 使用封装的axios实例

在Vue组件中,我们可以通过引入封装的axios实例来进行网络请求。下面是一个获取用户信息的示例:

import axios from '@/api/axios'

export default {
  data() {
    return {
      userInfo: {}
    }
  },

  created() {
    this.getUserInfo()
  },

  methods: {
    async getUserInfo() {
      try {
        const response = await axios.get('/user/info')
        this.userInfo = response.data
      } catch(err) {
        console.error(err)
      }
    }
  }
}

在上面的代码中,我们通过引入封装的axios实例来进行网络请求。在获取用户信息的方法中调用了axios.get('/user/info')方法来发送 GET 请求获取用户信息,并通过asyncawait来处理异步请求的返回数据。如果请求成功,则将返回的数据赋值给组件的userInfo属性。

这样,我们就完成了对axios的封装。通过封装,使得我们的代码更加清晰、易于维护,且请求数据时能够按照一定规则进行处理,提高了代码复用性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Vue中是如何封装axios - Python技术站

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

相关文章

  • 在vue里使用codemirror遇到的问题

    下面是关于在Vue中使用CodeMirror遇到的问题的完整攻略: 问题描述 在Vue项目中,想要集成CodeMirror来实现代码编辑功能,但是在实际过程中可能会遇到以下问题: CodeMirror在Vue组件中无法正常显示; CodeMirror在Vue组件中无法获取焦点。 接下来,我们将分别讲解如何解决这两个问题。 问题一:CodeMirror无法正常…

    Vue 2023年5月27日
    00
  • Vue select 绑定动态变量的实例讲解

    下面我将详细讲解如何在Vue中使用select绑定动态变量的实例攻略。 首先,我们需要导入Vue.js,然后创建Vue实例,并在该实例的data属性中定义我们需要绑定的动态变量(这里我们定义一个变量名为selectedValue)。然后我们需要在Vue实例中声明一个options对象,其中包含一个数组,该数组中包含我们需要绑定到select元素的选项。最后,…

    Vue 2023年5月29日
    00
  • 在vue中读取本地Json文件的方法

    当需要在Vue项目中读取本地的JSON文件时,可以使用 Vue.js 的 HTTP 客户端 Vue-resource 或者使用浏览器的原生 API fetch。 下面我将为您提供 Vue-resource 和 fetch 两种方法的使用详细攻略和示例。 一、使用Vue-resource获取本地JSON文件的方法 安装Vue-resource 首先需要在Vue…

    Vue 2023年5月28日
    00
  • vue3+ElementPlus使用lang=”ts”报Unexpected token错误的解决办法

    首先需要明确的是,vue3和ElementPlus均支持使用TypeScript语言进行开发,因此我们可以使用lang=”ts”来指定代码的语言类型。但是,如果在使用过程中出现了Unexpected token错误,需要进行以下的解决办法。 确认项目是否已经安装了必要的依赖 在使用TypeScript时,我们需要安装一些必要的依赖,例如ts-loader、t…

    Vue 2023年5月28日
    00
  • vue中的事件修饰符介绍和示例

    当在 Vue 模板中使用事件处理函数时,我们可以添加事件修饰符,这些修饰符用来表示某个事件应该如何被处理。下面我们来详细了解 Vue 中事件修饰符的使用。 修饰符的语法 Vue中的事件修饰符通过添加点号来表示,例如: <button v-on:click.prevent="submit">Submit</button&g…

    Vue 2023年5月27日
    00
  • vue 移动端注入骨架屏的配置方法

    下面我会详细讲解在 Vue 移动端项目中如何注入骨架屏。 什么是骨架屏? 骨架屏是一种用于提高移动端用户体验的技术,它是在页面内容还未加载完成时展示的一种占位元素,可以提高用户对页面加载进度的感知。骨架屏通常采用灰色填充块线条等元素,展示页面结构和布局,让用户感知到页面正在加载内容。 注入骨架屏的配置方法 在 Vue 移动端项目中,可以使用 vue-skel…

    Vue 2023年5月28日
    00
  • JS实现的类似微信聊天效果示例

    JS实现的类似微信聊天效果示例,可以通过以下步骤来完成: 编写HTML结构 我们可以使用 标签来包裹聊天记录,每条聊天记录用 标签表示,聊天头像使用标签,聊天内容使用 标签表示。 示例代码: <ul id="chat-container"> <li class="chat-right"> &lt…

    Vue 2023年5月28日
    00
  • vue中rem的配置的方法示例

    当我们在使用vue框架开发网站时,经常需要使用rem单位进行网站的样式设计,然而,在不同的屏幕大小下,rem的大小也需要跟着变化,因此我们需要针对不同的屏幕尺寸去设置不同的rem大小。以下是在vue中配置rem的方法示例。 一、安装插件 在vue中配置rem需要使用一个插件,即postcss-pxtorem,我们可以通过以下命令进行安装: npm insta…

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