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 相关文章推荐
top.location.href 没有权限 解决方法
Aug 05 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
May 19 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
vue深入解析之render function code详解
Jul 18 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
Vue 实现输入框新增搜索历史记录功能
Oct 15 Javascript
Vue中img的src是动态渲染时不显示的解决
Nov 14 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
微信小程序实现简单的select下拉框
Nov 23 Javascript
关于Js中new操作符的作用详解
Feb 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
php获取操作系统语言代码
2013/11/04 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python实现的防DDoS脚本
2011/02/08 Python
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
用Python抢过年的火车票附源码
2015/12/07 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Django中的forms组件实例详解
2018/11/08 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
关于是否需要写商业计划书
2014/02/07 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
Docker部署Mysql8的实现步骤
2022/07/07 Servers