首页 > 其他分享 >Vue中如何对Axios进行二次封装

Vue中如何对Axios进行二次封装

时间:2024-02-01 17:07:02浏览次数:27  
标签:axios 拦截器 封装 请求 Vue Axios return response

作为一个前端开发者,你一定对Axios这个强大的HTTP库非常熟悉。它不仅简化了与后端API的通信,而且还提供了许多强大的功能,如拦截器、取消请求等。但是在实际开发中,我们经常需要对Axios进行二次封装,以便更好地适应我们的业务需求。

今天,我将为大家分享一下如何在Vue中对Axios进行二次封装,并展示一些实用的封装技巧和代码示例。

首先,我们需要在Vue项目中安装Axios。打开终端并执行以下命令:

npm install axios

安装完成后,在main.js文件中引入Axios:

import axios from 'axios'

Vue.prototype.$http = axios

这样就可以在整个Vue项目中使用Axios了。

接下来,让我们来封装一个实用的Axios,以便更好地满足我们的业务需求。

添加请求拦截器

在开发过程中,我们经常需要对请求进行一些额外的处理,比如添加token、修改请求参数等。为了方便处理这些需求,我们可以添加一个请求拦截器。

// main.js

axios.interceptors.request.use(config => {
  // 在请求发送前对请求进行处理
  // 例如:添加token
  config.headers.Authorization = 'Bearer ' + getToken()
  return config
}, error => {
  return Promise.reject(error)
})

上述代码通过axios.interceptors.request.use方法来添加请求拦截器。在请求发送前,我们可以在config对象中进行一些自定义操作,比如添加token。

添加响应拦截器

与请求拦截器类似,响应拦截器可以在请求返回后对响应进行处理。我们可以根据响应的状态码做一些统一的操作,比如错误处理、统一的数据格式化等。

// main.js

axios.interceptors.response.use(response => {
  // 对响应进行处理
  // 例如:统一处理错误状态码
  if (response.status === 200) {
    return response.data
  } else {
    return Promise.reject(new Error(response.statusText))
  }
}, error => {
  return Promise.reject(error)
})

上述代码通过axios.interceptors.response.use方法来添加响应拦截器。在拦截器中,我们可以根据响应的状态码对响应进行处理,例如统一处理错误状态码。

封装实用的Axios

下面,我将介绍一个实用的Axios封装方式,以便更好地调用和管理我们的API请求。

import axios from 'axios'

const instance = axios.create({
  // 自定义配置选项
  timeout: 5000, // 超时设置
  baseURL: process.env.VUE_APP_API // 请求的base url
})

// 添加请求拦截器
instance.interceptors.request.use(config => {
  // 在请求发送前对请求进行处理
  // 例如:添加token
  config.headers.Authorization = 'Bearer ' + getToken()
  return config
}, error => {
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(response => {
  // 对响应进行处理
  // 例如:统一处理错误状态码
  if (response.status === 200) {
    return response.data
  } else {
    return Promise.reject(new Error(response.statusText))
  }
}, error => {
  return Promise.reject(error)
})

export default instance

上述代码通过axios.create方法创建了一个实例,我们可以根据业务需求自定义配置选项,比如设置超时时间、设置请求的base url等。

同时,我们还通过instance.interceptors.request.use方法和instance.interceptors.response.use方法分别添加了请求拦截器和响应拦截器。

最后,我们通过export default instance导出这个封装好的Axios实例,在需要的地方引入并使用即可。

以上就是对Vue中Axios进行二次封装的方法和示例。通过封装,我们可以更灵活地处理请求和响应,并且可以根据业务需求定制化Axios的配置。

希望本篇博客对你学习Vue和二次封装Axios有所帮助!如果有任何疑问或建议,欢迎留言讨论。谢谢!

更多面试题请点击:web前端高频面试题【共78课时】_前端技术课程-51CTO学堂

最后问候亲爱的朋友们,并诚挚地邀请你们阅读我的全新著作。

标签:axios,拦截器,封装,请求,Vue,Axios,return,response
From: https://blog.51cto.com/u_12765394/9533608

相关文章

  • 部署vue项目笔记
    vue项目,本地打包,npmrunbuild打包之后有dist目录nginx的配置指向dist根路径直接访问nginx服务器就行了server{listenXXXX;server_nameXXXXXXXXX;location/{root/usr/local/vue-app/dist的根目录地址; try_fi......
  • 从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架
    项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/vue-ts-scaffold目录前言脚手架技术栈简介vue3TypeScriptPiniaTailwindCSSElementPlusvite详细步骤Node.js安装创建以typescript开发的vue3工程集成Pinia安装pinia修改main.ts创建一个store在组件中使用store集......
  • vue3,封装检测元素大小变化的自定义指令
    1//resizeObserver.ts2//监听元素大小变化的指令3constmap=newWeakMap()4constob=newResizeObserver((entries)=>{5for(constentryofentries){6//获取dom元素的回调7consthandler=map.get(entry.target)8//存在回调函......
  • vue3+elementplus+vuedraggable插件,实现左右拖拽移入,和上下拖拽排序
    先看目标效果(gif由迅捷gif工具制作,使用vscode可以打开gif,进行预览)效果分析1.左右区域,支持拖拽。左侧选项,拖入右边。可以新建大模块,也可以给模块新增一项。2.模块内部,支持拖拽排序,并按照排序,生成一个简单的层级。3.模块名字支持编辑。同时增加表单校验,名字不存在,则无法保存。......
  • 3秒钟教你如何配置vscode中的vue3代码快速生成模版
    1.首先点击你的vscode左下角的齿轮设置按钮,然后点击配置用户代码片段2.输入vue搜索vue.json这个文件,然后点击这个文件3.接下来只需在原有的注释之下输入粘贴如下代码即可4.代码如下"vue3":{"prefix":"vue3","body":["<template>",......
  • vue项目路由配置,打开页面空白,其他菜单正常显示问题
     如果你的项目文件夹里面的内容同时存在index.js  index.vue(类似),那么路由配置路径的时候一定要带上.vue如果单纯的写Index,会找到.js文件,导致页面不显示   ......
  • Vue 搭配GSAP实现颜色动态渐变
    重点使用reactive构造响应式的对象存储颜色,使用gsap.to操作响应式对象实现颜色渐变代码lettoTimeLine:TweenletoverTimeLine:TweentypeColor={value:string}typeTween=gsap.core.TweenconstaddItemColor=reactive<C......
  • vue3-setup中如何通过ref调用子组件的函数
    vue3-setup中如何通过ref调用子组件的函数子组件通过defineExpose向外导出需要调用的函数在父子间中定义ref引用来调用子组件关键代码:<scriptsetup>import{ref,reactive,defineExpose}from'vue'constshow=ref(false);consttitle=ref('添加收款方式');con......
  • Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话、流式输出和自定义baseUrl
     源码及更详细的介绍说明参见Git上的README.md文档https://github.com/asleepyfish/chatgpt本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatg......
  • 关于 java如何集成chatgpt,如何开发接口,如何集成vue前端界面
    Java如何集成ChatGPT,如何开发接口,如何集成Vue前端界面随着人工智能技术的不断发展,聊天机器人已经成为了人们日常生活中不可或缺的一部分。ChatGPT是一种基于深度学习的聊天机器人技术,它可以通过学习大量的语料库来生成自然流畅的对话。本文将介绍如何使用Java语言集成ChatGPT,开......