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配合css简单实现返回顶部效果
Sep 30 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
javascript 实现 原路返回
Jan 21 Javascript
JS模拟按钮点击功能的方法
Dec 22 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
Jun 08 Javascript
JS中如何比较两个Json对象是否相等实例代码
Jul 13 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
vue2.0+koa2+mongodb实现注册登录
Apr 10 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
详解JS取出两个数组中的不同或相同元素
Mar 20 Javascript
0基础学习前端开发的一些建议
Jul 14 Javascript
three.js显示中文字体与tween应用详析
Jan 04 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
编译问题
2006/10/09 PHP
PHP+DBM的同学录程序(3)
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php统计文章排行示例
2014/03/04 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
深入理解Javascript中的this关键字
2015/03/27 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
python str字符串转uuid实例
2020/03/03 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
微型企业创业投资计划书
2014/01/10 职场文书
七年级历史教学反思
2014/02/05 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
自荐信如何制作?
2014/02/21 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python