vue中axios封装使用的完整教程


Posted in Vue.js onMarch 03, 2021

前言

如今,在项目中,普遍采用Axios库进行Http接口请求。它是基于promise的http库,可运行在浏览器端和node.js中。此外还有拦截请求和响应、转换JSON数据、客户端防御XSRF等优秀的特性。

考虑到各个项目实际使用时写法混乱,不统一。对Axios进行一下通用化的封装,目的是帮助简化代码和利于后期的更新维护,尽量通用化。

方法如下

1. vue安装axios

npm install axios -S
	或者
	npm i axios -S

2. 在main.js进行全局引入

import axios from 'axios'
	Vue.prototype.$axios = axios //将axios绑定到vue的原型上

3. 配置跨域 在根目录下vue.config.js里边

module.exports = {
	 publicPath: './',
	 //配置跨域请求
	 devServer: {
	  open: true, //是否自动打开浏览器
	  https: false, //是否开启https
	  hotOnly: false,
	  proxy: { // 配置跨域
	   '/api': {
	    target: 'http://********', //请求接口域名 
	    ws: true,
	    secure: false,
	    changOrigin: true, //是否允许跨越
	    pathRewrite: {
	     '^/api': ''
	    }
	   }
	  },
	  before: app => { }
	 }
	}

4. 在src子目录下的api文件夹下创建api.js文件进行简单的封装axios

import axios from 'axios'
//这里引用了element的loading全屏加载
import { Loading } from "element-ui";

const service = axios.create({
 baseURL: '/',
 timeout: 30000 // 设置请求超时时间
})
let loading = "";
// 请求拦截器
service.interceptors.request.use(
 (config) => {
  // 在请求发送之前做一些处理
  if (!(config.headers['Content-Type'])) {
   loading = Loading.service({
    lock: true,
    text: "加载中...",
    spinner: "el-icon-loading",
    background: "rgba(255,255,255,0.7)",
    customClass: "request-loading",
   });
   if (config.method == 'post') {
    config.headers['Content-Type'] =
     'application/json;charset=UTF-8'
    for (var key in config.data) {
     if (config.data[key] === '') {
      delete config.data[key]
     }
    }
    config.data = JSON.stringify(config.data)
   } else {
    config.headers['Content-Type'] =
     'application/x-www-form-urlencoded;charset=UTF-8'
    config.data = JSON.stringify(config.data)
   }
  }
  const token = "token"
  // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
  if (token) {
   config.headers['Authorization'] = token
  }
  return config
 },
 (error) => {
  loading.close();
  // 发送失败
  console.log(error)
  return Promise.reject(error)
 }
)

// 响应拦截器
service.interceptors.response.use(
 (response) => {

  loading.close();
  // dataAxios 是 axios 返回数据中的 data
  // loadingInstance.close();
  const dataAxios = response.data
  // 这个状态码是和后端约定的

  return dataAxios
 },
 (error) => {
  return Promise.reject(error)
 }
)

	export default service

5. 在api文件夹下创建http文件

// 引入封装好的axios
 // ps:如果没有封装,正常引入axios即可
  import axios from "./api";
	// 	/api为配置跨域的路径变量
  let reportUpload= '/api/report/upload'
  export const Upload= () => {
   return axios.get( reportUpload )
  }

6. 在页面中调用接口

// 引入封装好的接口
 	import { Upload} from "@/api/http.js"; 

// 调用时使用
 async Upload() {
  let { result } = await getlist ();
  	console.log(result)
 },

总结

到此这篇关于vue中axios封装使用的文章就介绍到这了,更多相关vue axios封装使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 #Vue.js
详解vue3中组件的非兼容变更
Mar 03 #Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 #Vue.js
Vue多选列表组件深入详解
Mar 02 #Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 #Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 #Vue.js
vue脚手架项目创建步骤详解
Mar 02 #Vue.js
You might like
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
PHP反射实际应用示例
2019/04/03 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
js对象的比较
2011/02/26 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
js实现放大镜特效
2017/05/18 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
深入解析Python中的线程同步方法
2016/06/14 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
银行实习生的自我评价
2013/12/09 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
读书月活动方案
2014/05/22 职场文书
Nginx实现负载均衡的项目实践
2022/03/18 Servers
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server