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配置axios跨域实现过程解析
Nov 25 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue组件vue-esign实现电子签名
Apr 21 Vue.js
vue实现简易音乐播放器
Aug 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
Laravel 5 框架入门(一)
2015/04/09 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
前端微信支付js代码
2016/07/25 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python API len函数操作过程解析
2020/03/05 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
店长助理岗位职责
2013/12/13 职场文书
中班中秋节活动反思
2014/02/18 职场文书
网络编辑职责
2014/03/01 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
付款委托书范本
2014/10/05 职场文书
护林员个人总结
2015/03/04 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android