封装一下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 相关文章推荐
js正则表达式的使用详解
Jul 09 Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
Jul 20 Javascript
很棒的js Tab选项卡切换效果
Aug 30 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
vue-dplayer 视频播放器实例代码
Nov 08 Javascript
jQuery实现简单聊天室
Feb 08 jQuery
jQuery中getJSON跨域原理的深入讲解
Sep 02 jQuery
MutationObserver在页面水印实现起到的作用详解
Jul 07 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
教你IIS6的PHP最佳配置方法
2006/09/05 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP验证码类ValidateCode解析
2017/01/07 PHP
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
中止javascript执行的方法
2014/02/14 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python函数装饰器用法实例详解
2015/06/04 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
pycharm远程调试openstack的图文教程
2017/11/21 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
行政管理毕业生自荐信
2014/02/24 职场文书
可口可乐广告词
2014/03/20 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
政府采购方案
2014/06/12 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
个人事迹材料范文
2014/12/29 职场文书
社区端午节活动总结
2015/02/11 职场文书
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL