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中使用each处理json数据
Apr 23 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
Sep 09 Javascript
jQuery post数据至ashx实例详解
Nov 18 Javascript
Angular实现响应式表单
Aug 04 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序实现授权登录
May 15 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 Javascript
Node.js API详解之 os模块用法实例分析
May 06 Javascript
在vue中使用Base64转码的案例
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函数解决SQL injection
2006/12/09 PHP
php中的登陆login
2007/01/18 PHP
php 高性能书写
2010/12/11 PHP
解析yii数据库的增删查改
2013/06/20 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
js图片处理示例代码
2014/05/12 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python实现自动重启本程序的方法
2015/07/09 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
颁奖典礼主持词
2014/03/25 职场文书
大学新生军训方案
2014/05/03 职场文书
创建文明城市标语
2014/06/16 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python