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 Prototype对象
Jan 07 Javascript
javascript中不等于的代码是什么怎么写
Dec 29 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
模拟javascript中的sort排序(简单实例)
Aug 17 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
Dec 27 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 Javascript
20道JS原理题助你面试一臂之力(必看)
Jul 22 Javascript
js实现GIF图片的分解和合成
Oct 24 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
用Php实现链结人气统计
2006/10/09 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
Javascript 布尔型分析
2008/12/22 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
js日期联动示例
2014/05/02 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python交换变量
2008/09/06 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
入党思想汇报怎么写
2014/04/03 职场文书
环卫工人节活动总结
2014/08/29 职场文书
2014年工程工作总结
2014/11/25 职场文书
高三复习计划
2015/01/19 职场文书
安全伴我行主题班会
2015/08/13 职场文书
《山中访友》教学反思
2016/02/24 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python