vue axios请求拦截实例代码


Posted in Javascript onMarch 29, 2018

axios 简介

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

从浏览器中创建 XMLHttpRequest
从 node.js 发出 http 请求
支持 Promise API
拦截请求和响应
转换请求和响应数据
取消请求
自动转换JSON数据
客户端支持防止 CSRF/XSRF

下面代码给大家介绍vue axios 请求拦截,具体代码如下所示:

import axios from 'axios';//引入axios依赖
import { Message } from 'element-ui';
import Cookies from 'js-cookie'; //引入cookie操作依赖
import router from '@/router/index'//引入路由对象
axios.defaults.timeout = 5000;
axios.defaults.baseURL ='';
//http request 封装请求头拦截器
axios.interceptors.request.use(
  config => {
    var token = ''
    if(typeof Cookies.get('user') === 'undefined'){
      //此时为空
    }else {
      token = JSON.parse(Cookies.get('user')).token
    }//注意使用的时候需要引入cookie方法,推荐js-cookie
    config.data = JSON.stringify(config.data);
    config.headers = {
      'Content-Type':'application/json'
    }
    if(token != ''){
     config.headers.token = token;
    }
    return config;
  },
  error => {
    return Promise.reject(err);
  }
);
//http response 封装后台返回拦截器
axios.interceptors.response.use(
  response => {
    //当返回信息为未登录或者登录失效的时候重定向为登录页面
    if(response.data.code == 'W_100004' || response.data.message == '用户未登录或登录超时,请登录!'){
      router.push({
        path:"/",
        querry:{redirect:router.currentRoute.fullPath}//从哪个页面跳转
      })
    }
    return response;
  },
  error => {
    return Promise.reject(error)
  }
)
/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function fetch(url,params={}){
  return new Promise((resolve,reject) => {
    axios.get(url,{
      params:params
    })
      .then(response => {
        resolve(response.data);
      })
      .catch(err => {
        reject(err)
      })
  })
}
/**
 * 封装post请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url,data = {}){
  return new Promise((resolve,reject) => {
    axios.post(url,data)
      .then(response => {
        resolve(response.data);
      },err => {
        reject(err)
      })
  })
}
/**
 * 封装导出Excal文件请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function exportExcel(url,data = {}){
  return new Promise((resolve,reject) => {
    axios({
      method: 'post',
      url: url, // 请求地址
      data: data, // 参数
      responseType: 'blob' // 表明返回服务器返回的数据类型
    })
    .then(response => {
      resolve(response.data);
      let blob = new Blob([response.data], {type: "application/vnd.ms-excel"});
      let fileName = "订单列表_"+Date.parse(new Date())+".xls" ;
      if (window.navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob, fileName);
      } else {
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = fileName;
        link.click();
        window.URL.revokeObjectURL(link.href);
      }
    },err => {
      reject(err)
    })
  })
}
/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function patch(url,data = {}){
  return new Promise((resolve,reject) => {
    axios.patch(url,data)
      .then(response => {
        resolve(response.data);
      },err => {
        reject(err)
      })
  })
}
/**
 * 封装put请求
 * @param url
 * @param data
 * @returns {Promise}
 */
export function put(url,data = {}){
  return new Promise((resolve,reject) => {
    axios.put(url,data)
      .then(response => {
        resolve(response.data);
      },err => {
        reject(err)
      })
  })
}

总结

以上所述是小编给大家介绍的vue axios请求拦截,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
页面图片浮动左右滑动效果的简单实现案例
Feb 10 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
jQuery电话号码验证实例
Jan 05 Javascript
js实现适配不同的屏幕大小
Apr 10 Javascript
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
在vue-cli项目中使用bootstrap的方法示例
Apr 21 Javascript
vue项目持久化存储数据的实现代码
Oct 01 Javascript
jquery拖拽自动排序插件使用方法详解
Jul 20 jQuery
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 #Javascript
jQuery实现的上传图片本地预览效果简单示例
Mar 29 #jQuery
详解Javascript中new()到底做了些什么?
Mar 29 #Javascript
Koa2 之文件上传下载的示例代码
Mar 29 #Javascript
AngularJS下$http服务Post方法传递json参数的实例
Mar 29 #Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 #Javascript
利用js实现前后台传送Json的示例代码
Mar 29 #Javascript
You might like
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
2019十大人气国漫
2020/03/13 国漫
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php写app用的框架整理
2019/09/29 PHP
JavaScript中的私有成员
2006/09/18 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
layui 弹出删除确认界面的实例
2019/09/06 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python字典的常用操作方法小结
2016/05/16 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python如何使用函数做字典的值
2019/11/30 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
简述安装Slackware Linux系统的过程
2012/01/12 面试题
市场营销个人求职信范文
2014/02/02 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers