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项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
ant design vue的form表单取值方法
Jun 01 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
php flv视频时间获取函数
2010/06/29 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
python中global用法实例分析
2015/04/30 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
python groupby 函数 as_index详解
2019/12/16 Python
Pycharm安装python库的方法
2020/11/24 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
医院辞职信范文
2014/01/17 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
班级寄语大全
2014/04/10 职场文书
销售员岗位职责
2015/02/10 职场文书
小学生手册家长意见
2015/06/03 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang