微信小程序中如何使用flyio封装网络请求


Posted in Javascript onJuly 03, 2019

Flyio简介

Fly.js 通过在不同 JavaScript 运行时通过在底层切换不同的 Http Engine来实现多环境支持,但同时对用户层提供统一、标准的Promise API。不仅如此,Fly.js还支持请求/响应拦截器、自动转化JSON、请求转发等功能,详情请参考:https://github.com/wendux/fly 。

下面我们看看在微信小程序、mpvue中和中如何使用fly.

Flyio 官方地址

文档

github地址

Flyio的一些特点

fly.js 是一个基于 promise 的,轻量且强大的Javascript http 网络库,它有如下特点:

  • 提供统一的 Promise API。
  • 浏览器环境下,轻量且非常轻量 。
  • 支持多种JavaScript 运行环境
  • 支持请求/响应拦截器。
  • 自动转换 JSON 数据。
  • 支持切换底层 Http Engine,可轻松适配各种运行环境。
  • 浏览器端支持全局Ajax拦截 。
  • H5页面内嵌到原生 APP 中时,支持将 http 请求转发到 Native。支持直接请求图片。

在小程序中使用flyio请求,封装代码如下

一、src下新建utils/request.js文件

var Fly=require("flyio/dist/npm/wx") 
import { getCache } from '../utils'
const request = new Fly()
// 全局加载提示 - 设定时间
let ltime = 0;

function closeLoading(param) {
  ltime--
 }
request.interceptors.request.use((request) => {
  // 全局加载提示 - 展示提示
  // wx.showNavigationBarLoading() 
  ltime++
  let dataSource = getCache("dataSource")
  request.headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "source": "miniApp",
    "dataSource": dataSource ? dataSource : ''
  }
  // 没用到
  if (request.url.indexOf('getReviewInfo') != -1) {
    closeLoading()
    return request
  }
  // 登录
  console.log('这是token');
  console.log();
  let type = '';
  if(request.url.indexOf("wxLogin") != -1) {
    type = request.body.loginType;
  }
  console.log(getCache("token"));
  console.log('这是token');
  if (request.url.indexOf("wxLogin") == -1 || type == 'WORKBENCH') {
    // let storeId = getCache("storeId");
    let storeCode = getCache("storeCode");
    let inviter = getCache("inviter");
    let token = getCache("token");
    request.headers = {
      "Content-Type": "application/x-www-form-urlencoded",
      "source": "miniApp",
      "token": token,
      "storeCode": storeCode,
      "inviter": inviter
    }
    console.log('打印request');
    console.log(request);
    console.log('打印request');
    let dataSource = getCache("dataSource")
    if (dataSource) {
      request.headers['dataSource'] = dataSource
    }
  }
  return request
})
request.interceptors.response.use((response, promise) => {
     closeLoading()
    // wx.hideNavigationBarLoading()
    // 微信运维统计
    if (response.status) {
      wx.reportMonitor('0', +(response.status))
    }
    if (response.headers.date) {
      let time = new Date().getTime() - new Date(response.headers.date).getTime()
      wx.reportMonitor('1', +(time))
    }
    // 错误提示
    if (response.status != 200) {
      wx.showToast({
        title: '出错啦!请稍后再试试哦~',
        icon: 'none',
        duration: 2000
      })
    }
    return promise.resolve(response.data)
  },
  (err, promise) => {
    wx.hideNavigationBarLoading()
    return promise.resolve()
  }
)
export default request

二、src下新建utils/api.js文件

export const baseUrlApi = 'http://192.168.128.242:8080'//---开发调试环境
//export const baseUrlApi = 'https://test.mini.com'//---测试环境https
//export const baseUrlApi = 'https://product.mini.com'//---生产环境https

这个里面可以写不同环境或者调试的接口地址

三、src下新建service文件夹

在这个下面不同的模块简历不同的js文件,例如:login-service.js,order-service.js

里面代码示例如下

import { baseUrlApi } from '../utils/api'
import request from '../utils/request'

export default {
 // 登录
  wxLogin: (data) =>
    request.post(`/store-miniApp-web/external/interface/wechat/wxLogin`, data, { baseURL: baseUrlApi }),
 // 收藏
 addCollect: (goodId, status) =>
  request.get(`/store-miniApp-web/store/member/addCollect?goodId=${goodId}&status=${status}`,
   null, {
    baseURL: baseUrlApi
   }),
}

四、接口请求的使用

import loginApi from "@/service/login-service";
 methods: {
//-登录
  clickLoginBtn() {
   var data = {
    phone: '18709090909',
    password: "123456",
   };
   console.log("登录参数==", data);
   loginApi.wxLogin(data).then(
    data => {
     if (!data) {
      this.$toast(data.msg);
      return;
     }
     if (data.code==0) {
      console.log("登录成功", data);  
     }
    },
    err => {
    }
   );
  },
  //-收藏
  collect() {
   let isCollect = "1"; //1收藏 0取消
   let goodId = "4343434";
   loginApi.addCollect(goodsId, isCollect).then(data => {
    if (data.code != 0) {
     console.log("收藏失败", data);
     return;
    }
    if (isCollect == 1) {
     this.$toast("取消成功");
    } else {
     this.$toast("收藏成功");
    }
   });
  }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery的checkbox下拉框插件代码
Jun 25 Javascript
来自国外的页面JavaScript文件优化
Dec 08 Javascript
jquery使用$(element).is()来判断获取的tagName
Aug 24 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
JavaScript入门教程之引用类型
May 04 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
Jun 09 Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
jQuery实现全选按钮
Jan 01 jQuery
详解CocosCreator项目结构机制
Apr 14 Javascript
浅谈Vue的computed计算属性
Mar 21 Vue.js
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 #jQuery
使用vue实现各类弹出框组件
Jul 03 #Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
Jul 03 #Javascript
使用微信SDK自定义分享的方法
Jul 03 #Javascript
微信小程序判断页面是否从其他页面返回的实例代码
Jul 03 #Javascript
8 个有用的JS技巧(推荐)
Jul 03 #Javascript
vue swipe自定义组件实现轮播效果
Jul 03 #Javascript
You might like
咖啡的传说和历史
2021/03/03 新手入门
php中cookie的作用域
2008/03/27 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
用ADODB.Stream转换
2007/01/22 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
Python图算法实例分析
2016/08/13 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
竞选演讲稿范文
2013/12/28 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
高中军训感想300字
2014/03/04 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
大学副班长竞选稿
2015/11/21 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
SQL注入的实现以及防范示例详解
2021/06/02 MySQL