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事件模型代码
Jul 01 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
javascript上传图片前预览图片兼容大多数浏览器
Oct 25 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
Nov 07 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
Nov 04 Javascript
uploader秒传图片到服务器完整代码
Apr 22 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
vue-video-player视频播放器使用配置详解
Oct 23 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 Javascript
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
星际争霸兵种名称对照表
2020/03/04 星际争霸
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
javascript eval函数深入认识
2009/02/21 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
2015/06/01 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
详解Python正则表达式re模块
2019/03/19 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
领导干部作风整顿剖析材料
2014/10/11 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
django注册用邮箱发送验证码的实现
2021/04/18 Python