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 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
一个XML格式数据转换为图表的例子
Feb 09 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
JS简单计算器实例
Jan 20 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
基于jquery编写的放大镜插件
Mar 23 Javascript
JS日程管理插件FullCalendar中文说明文档
Feb 06 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 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
php smarty模版引擎中的缓存应用
2009/12/02 PHP
PHP print类函数使用总结
2010/06/25 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python ip正则式
2009/05/07 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
Python flask框架post接口调用示例
2019/07/03 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
学生会干部自荐信
2014/02/04 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
详解在OpenCV中如何使用图像像素
2022/03/03 Python