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 相关文章推荐
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue 实现上传组件
May 31 Vue.js
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
vue3种table表格选项个数的控制方法
Apr 14 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
在字符串中把网址改成超级链接
2006/10/09 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
javascript CSS画图之基础篇
2009/07/29 Javascript
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
详解vue高级特性
2020/06/09 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
将python代码和注释分离的方法
2018/04/21 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
环保公益广告语
2014/03/13 职场文书
社团活动总结怎么写
2014/06/30 职场文书
公证委托书格式
2014/09/13 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书