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获得地址栏参数的两种方法
Nov 08 Javascript
jQuery之自动完成组件的深入解析
Jun 19 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
JS简单实现数组去重的方法示例
Mar 27 Javascript
JScript实现表格的简单操作
Aug 15 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
vue中v-for通过动态绑定class实现触发效果
Dec 06 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
jQuery实现消息弹出框效果
Dec 10 jQuery
如何使用vue slot创建一个模态框的实例代码
May 24 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 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使用NumberFormatter格式化货币的方法
2015/03/21 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
js实现随机点名程序
2020/09/17 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
django form和field具体方法和属性说明
2020/07/09 Python
Python定义一个Actor任务
2020/07/29 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
《花瓣飘香》教学反思
2014/04/15 职场文书
安全协议书范本
2014/04/21 职场文书
项目经理任命书范本
2014/06/05 职场文书
毕业实习单位意见
2015/06/04 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
python实现简易名片管理系统
2021/04/11 Python
golang中的并发和并行
2021/05/08 Golang
MySQL多表查询机制
2022/03/17 MySQL