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 相关文章推荐
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
Mar 12 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
Aug 23 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
简单理解js的冒泡排序
Dec 19 Javascript
js断点调试心得分享(必看篇)
Dec 08 Javascript
es6 symbol的实现方法示例
Apr 02 Javascript
详解Vue源码学习之双向绑定
Apr 10 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
详解Vue的options
May 15 Vue.js
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
PHP初学者头疼问题总结
2006/10/09 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
浅谈php://filter的妙用
2019/03/05 PHP
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Python3.5运算符操作实例详解
2019/04/25 Python
如何基于python操作excel并获取内容
2019/12/24 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
python算的上脚本语言吗
2020/06/22 Python
sort命令的作用和用法
2012/11/04 面试题
公司清洁工岗位职责
2013/12/14 职场文书
应届毕业生自荐信
2014/05/28 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2016中秋节问候语
2015/11/11 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers