封装一下vue中的axios示例代码详解


Posted in Javascript onFebruary 16, 2020

在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御cSRF等。所以我们的尤大大也是果断放弃了对其官方库vue-resource的维护,直接推荐我们使用axios库。如果还对axios不了解的,可以移步axios文档。

安装

npm install axios; // 安装axios

好了,下面开始今天的正文。

此次封装用以解决: (对于登录功能的可以直接使用,其他网络请求也可以直接用,如果有洁癖,可以把token有关的几行代码删掉)

ps:使用时得的引入axios时: import axios from '这个文件的名字及相对路径'

  • 接受后台token
  • post参数自动转换,省略qs.stringify()
  • 后台token过期之后自动清除本地数据,以便下次再次输入账号密码
  • 更好的错误提示信息
/**
 * 封装网络请求
 */
import axios from "axios"
import qs from "querystring"
import store from '../store'
import router from '../router'
//token过期之后重新回登录界面
const toLogin = () =>{
 router.push("/login")
}
// 错误信息响应方法
const errroHandle = (status,other) => {
 switch(status){
  case 400:
   console.log("服务器无法理解请求信息");
   break;
  case 401:
   console.log("用户信息验证失败");
   localStorage.removeItem("token"); // 可选项
   toLogin();
   break;
  case 403:
   console.log("请求被限制");
   localStorage.removeItem("token"); // 可选项
   toLogin();
   break;
  case 404:
   console.log("客户端请求信息错误");
   break;
  default:
   console.log(other);
   break;
 }
}
// 创建axios对象
const instance = axios.create({
 timeout:5000
})
// 挂在全局对象
instance.defaults.baseUrl = "";
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// 拦截器:请求拦截和响应拦截 post请求参数需要转码
// axios的返回值对象要求是一个promise对象
instance.interceptors.request.use(config =>{
 if(config.method === "post"){
  config.data = qs.stringify(config.data)
 }
 if(store.state.token){
  config.headers.authorization = store.state.token;
 }
 return config;
},error => Promise.reject(error))
instance.interceptors.response.use(
 // 成功
 response => response.status === 200 ? Promise.resolve(response) :Promise.reject(response),
 // 失败
 error => {
  const { response } = error;
  if(response){
   errroHandle(response.status,response.data)
   return Promise.reject(response)
  }else{
   // 错误信息都无法返回
   console.log("请求被中断");
  }
 }
)
export default instance

总结

以上所述是小编给大家介绍的封装一下vue中的axios示例代码详解,希望对大家有所帮助!

Javascript 相关文章推荐
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
window.location.href的用法(动态输出跳转)
Aug 09 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
May 28 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
解决LayUI表单获取不到data的问题
Aug 20 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
Vue.js的模板语法详解
Feb 16 #Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 #Javascript
vue数据响应式原理知识点总结
Feb 16 #Javascript
vue中利用iscroll.js解决pc端滚动问题
Feb 15 #Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
Feb 15 #Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 #Javascript
js表达式与运算符简单操作示例
Feb 15 #Javascript
You might like
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
基于zepto.js实现手机相册功能
2017/07/11 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
大学生求职中的自我评价
2013/10/01 职场文书
房地产销售大学生自我评价分享
2013/11/11 职场文书
八一建军节活动方案
2014/02/10 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
创先争优活动个人总结
2015/03/04 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL