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 insertAfter() 实现函数代码
Oct 12 Javascript
理解Javascript图片预加载
Feb 23 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
JS动态给对象添加属性和值的实现方法
Oct 21 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
Nov 11 Javascript
js获取浏览器和屏幕的各种宽度高度
Feb 22 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
Apr 26 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 Javascript
JSONP解决JS跨域问题的实现
May 25 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
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
validationEngine 表单验证插件使用实例代码
2017/06/15 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python查找相似单词的方法
2015/03/05 Python
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
详解Python文件修改的两种方式
2019/08/22 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
python装饰器原理与用法深入详解
2019/12/19 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
大学生职业生涯规划范文
2014/01/08 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
小学生学习感言
2014/03/10 职场文书
工程建设实施方案
2014/03/14 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
委托培训协议书
2014/11/17 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
行政撤诉申请书
2015/05/18 职场文书
员工离职证明范本
2015/06/12 职场文书
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android