mpvue中使用flyjs全局拦截的实现代码


Posted in Javascript onSeptember 13, 2018

我们安装好flyio之后

npm install flyio

找到src目录下的main.js文件

首先引入flyjs并实例化

var Fly=require("flyio/dist/npm/wx")
var fly=new Fly

比方说我们每次请求我们自己的服务器接口的时候需要带上appID,用户登陆后需要带上openId

// 请求拦截
fly.interceptors.request.use((request)=>{
 
 request.body.appId = 'xxx'
  // 用户的openId在获取之后添加到全局变量中如果存在,我们将它添加到请求参数里面
 let openId = Vue.prototype.globalData.openId;
 if(openId){
  request.body.openId = openId
 }
})

当服务器发生错误,或者用户网络错误导致请求失败的时候,我们可以添加一个响应拦截

// 响应拦截
fly.interceptors.response.use(
 (response) => {
 
 
 },
 (err) => {
  //发生网络错误后会走到这里
  //return Promise.resolve("ssss")
  wx.hideLoading();
  wx.showToast({
   title:'网络不流畅,请稍后再试!',
   icon:'none',
  });
 
 })

最后将flyjs挂载到vue的原型上

// 将fly挂载在Vue的原型上
Vue.prototype.$flyio = fly

不同页面直接使用this.$flyio请求(是不是很方便)

示例:

fly里面的拦截机制还是很强大的,并且在错误返回信息做了优化处理,在fly拦截器中支持执行异步任务,就是说在请求数据的时候如果拦截到token不存在那么我们就可以在拦截器中重新获取token,再接着执行之前的请求。

const Fly = require("flyio/dist/npm/wx")
const fly = new Fly
Vue.prototype.$http = fly;
 
fly.interceptors.request.use((request) => {
 //给所有请求添加自定义header
 if (api.Get('token')) {
  request.timeout = 30000,
   request.headers = {
    "content-type": "application/json",
    "cld.stats.page_entry": api.Get('scene'),
    "version": store.state.version,
    "token": api.Get('token')
   }
  wx.showLoading({
   title: "加载中",
   mask: true,
  });
  return request;
 } else {
  fly.lock();//锁住请求
  return Public.Load().then(res => {
   request.timeout = 30000,
    request.headers = {
     "content-type": "application/json",
     "cld.stats.page_entry": api.Get('scene'),
     "version": store.state.version,
     "token": api.Get('token')
    }
   wx.showLoading({
    title: "加载中",
    mask: true,
   });
    //等待token返回之后在解锁,
   fly.unlock();
   return request;//继续之前的请求,
  })
 }
})
 
fly.interceptors.response.use(
 (response) => {
  wx.hideLoading();
  return response
 },
 (err) => {
  wx.hideLoading();
  if (err.status == 0) {
   return "网络连接异常"
  } else if (err.status == 1) {
   return "网络连接超时"
  } else if (err.status == 401) {
   return "用户未登录"
  } else {
   if (err.response.data.message) {
    return err.response.data.message
   } else {
    return '请求数据失败,请稍后再试'
   }
  };
  // Do something with response error
 }
)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
JavaScript的setAttribute兼容性问题解决方法
Nov 11 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
用js实现博客打赏功能
Oct 24 Javascript
微信小程序实现留言板功能
Nov 02 Javascript
Vue数据绑定简析小结
May 07 Javascript
详解解决小程序中webview页面多层history返回问题
Aug 20 Javascript
Vue实现Layui的集成方法步骤
Apr 10 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
AngularJS修改model值时,显示内容不变的实例
Sep 13 #Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 #Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 #Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 #Javascript
vue interceptor 使用教程实例详解
Sep 13 #Javascript
Vue点击切换颜色的方法
Sep 13 #Javascript
node中的cookie的具体使用
Sep 13 #Javascript
You might like
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
JavaScript 函数模式详解及示例
2016/09/07 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
Python 编码处理-str与Unicode的区别
2016/09/06 Python
详解Python进程间通信之命名管道
2017/08/28 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
用python写测试数据文件过程解析
2019/09/25 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
python 基于wx实现音乐播放
2020/11/24 Python
前台文员职责范本
2014/03/07 职场文书
党员目标管理责任书
2014/07/25 职场文书
党校学习心得体会范文
2014/09/09 职场文书
婚礼答谢词范文
2015/09/29 职场文书
如何在Python中创建二叉树
2021/03/30 Python
logback如何自定义日志存储
2021/08/30 Java/Android