Vue添加请求拦截器及vue-resource 拦截器使用


Posted in Javascript onNovember 23, 2017

一、现象

统一处理错误及配置请求信息

二、解决

1、安装 axios  , 命令: npm install axios --save-dev

2、在根目录的config目录下新建文件 axios.js  ,内容如下:

import axios from 'axios'
// 配置默认的host,假如你的API host是:http://api.htmlx.club
axios.defaults.baseURL = 'http://api.htmlx.club' 
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么

return config
}, function (error) {

// 对请求错误做些什么
return Promise.reject(error)
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {

// 对响应数据做点什么

return response
}, function (error) {

// 对响应错误做点什么

return Promise.reject(error)
});

3、在main.js中进行引用,并配置一个别名($ajax)来进行调用:

import axios from 'axios'
import '../config/axios'
Vue.prototype.$ajax = axios

如图:

4、应用,一个登录的post如:

this.$ajax({
method: 'post',

url: '/login',

data: {


'userName': 'xxx',


'password': 'xxx'

}
}).then(res => {

console.log(res)
})

ps:下面看下vue-resource 拦截器使用

在vue项目使用vue-resource的过程中,临时增加了一个需求,需要在任何一个页面任何一次http请求,增加对token过期的判断,如果token已过期,需要跳转至登录页面。如果要在每个页面中的http请求操作中添加一次判断,那么会是一个非常大的修改工作量。那么vue-resource是否存在一个对于任何一次请求响应捕获的的公共回调函数呢?答案是有的!

vue-resource的interceptors拦截器的作用正是解决此需求的妙方。在每次http的请求响应之后,如果设置了拦截器如下,会优先执行拦截器函数,获取响应体,然后才会决定是否把response返回给

then进行接收。那么我们可以在这个拦截器里边添加对响应状态码的判断,来决定是跳转到登录页面还是留在当前页面继续获取数据。

下边代码添加在main.js中

Vue.http.interceptors.push((request, next) => {
 console.log(this)//此处this为请求所在页面的Vue实例
 // modify request
 request.method = 'POST';//在请求之前可以进行一些预处理和配置
 // continue to next interceptor
next((response) => {//在响应之后传给then之前对response进行修改和逻辑判断。对于token时候已过期的判断,就添加在此处,页面中任何一次http请求都会先调用此处方法
 
response.body = '...';


return response;
 });
});

在知道此方法之前,鄙人想了一个笨方法,但是也能在一定程度上降低修改工作量。方法是为Vue绑定一个this.$$http.get方法取代this.$http.get方法,每个页面的http请求添加个$在$http前即可。

// ajax.js
function plugin(Vue){
 Object.defineProperties(Vue.prototype,{
  $$http:{
   get(){
    return option(Vue);
   }
  }
 })
}
function option(Vue){
 let v = new Vue();
 return {
  get(a,b){
   let promise = new Promise(function(reslove,reject){
    v.$http.get(a,b).then((res)=>{
     reslove(res)
    },(err)=>{





//处理token过期问题。
    })
   })
   return promise;
  }
 }
}
module.exports=plugin;
//main.js
import ajax from './ajax.js'
Vue.use(ajax)

总结

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

Javascript 相关文章推荐
javascript 浏览器检测代码精简版
Mar 04 Javascript
JavaScript中yield实用简洁实现方式
Jun 12 Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
Jan 08 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
bootstrap datetimepicker控件位置异常的解决方法
Nov 23 #Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 #Javascript
bootstrap实现二级下拉菜单效果
Nov 23 #Javascript
详解vue项目的构建,打包,发布全过程
Nov 23 #Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 #Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 #Javascript
基于Bootstrap实现城市三级联动
Nov 23 #Javascript
You might like
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python 实现return返回多个值
2019/11/19 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
python opencv实现图像配准与比较
2021/02/09 Python
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
同学聚会策划方案
2014/06/06 职场文书
工作求职信
2014/07/04 职场文书
安全保证书
2015/01/16 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL