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中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
Vue如何实现验证码输入交互
Dec 07 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
Javascript模板技术
2007/04/27 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
js中this对象用法分析
2018/01/05 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Django模板Templates使用方法详解
2019/07/19 Python
Django之路由层的实现
2019/09/09 Python
浅谈Python 参数与变量
2020/06/20 Python
Python sublime安装及配置过程详解
2020/06/29 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
土建工程师岗位职责
2014/06/10 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
同事去世追悼词
2015/06/23 职场文书