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 相关文章推荐
jquery如何把数组变为字符串传到服务端并处理
Apr 30 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
js获取页面description的方法
May 21 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
Sep 12 Javascript
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 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 file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
php7 新增功能实例总结
2020/05/25 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
基于JavaScript实现单例模式
2019/10/30 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
python实现局域网内实时通信代码
2019/12/22 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
大学生的四年学习自我评价
2013/12/13 职场文书
五年级数学教学反思
2014/02/11 职场文书
学习决心书范文
2014/03/11 职场文书
应届生求职信范文
2014/05/26 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
浅谈Redis的事件驱动模型
2022/05/30 Redis