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如何循环提取对象数组中的值
Nov 18 Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
vue-video-player 断点续播的实现
Feb 01 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 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数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python写入CSV文件的方法
2015/07/08 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
利用python绘制正态分布曲线
2021/01/04 Python
建设单位项目负责人任命书
2014/06/06 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
2014年网管工作总结
2014/12/11 职场文书
用Python实现Newton插值法
2021/04/17 Python
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python