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中find()方法用法实例
Jan 07 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
Aug 09 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
详解vue父子模版嵌套案例
Mar 04 Javascript
Vue form 表单提交+ajax异步请求+分页效果
Apr 22 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
玩转Koa之核心原理分析
Dec 29 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 Javascript
vue @click.native 绑定原生点击事件
Apr 22 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之curl实现http与https请求的方法
2014/10/21 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
javascript add event remove event
2008/04/07 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python聚类算法之DBSACN实例分析
2015/11/20 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python 绘制可视化折线图
2020/07/22 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
致铅球运动员加油稿
2014/02/13 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
招商银行工作证明
2015/06/17 职场文书
给学校的建议书400字
2015/09/14 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书