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多浏览器捕捉回车事件代码
Jun 22 Javascript
javascript中的if语句使用介绍
Nov 20 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
Dec 29 Javascript
JS保留两位小数,多位小数的示例代码
Jan 07 Javascript
Javascript基础教程之数据类型 (数值 Number)
Jan 18 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
Ionic如何创建APP项目
Jun 03 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
vue实现重置表单信息为空的方法
Sep 29 Javascript
浅谈JavaScript 代码简洁之道
Jan 09 Javascript
基于Vue 实现一个中规中矩loading组件
Apr 03 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP 变量的定义方法
2010/01/26 PHP
thinkphp分页集成实例
2017/07/24 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
MySQL最常见的操作语句小结
2015/05/07 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python实现大文件分割与合并
2019/07/22 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
一道写SQL的面试题和答案
2013/11/19 面试题
门卫岗位职责
2013/11/15 职场文书
技能比赛获奖感言
2014/02/14 职场文书
园艺师求职信
2014/04/27 职场文书
药剂专业自荐书
2014/06/20 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
党的群众路线教育实践活动学习计划
2014/11/03 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
深度学习详解之初试机器学习
2021/04/14 Python