微信小程序中如何使用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 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
利用js实现遮罩以及弹出可移动登录窗口
Jul 08 Javascript
jQuery对象的selector属性用法实例
Dec 27 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
react ant Design手动设置表单的值操作
Oct 31 Javascript
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
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
PHP数组函数知识汇总
2016/05/12 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
vue-cli配置环境变量的方法
2018/07/09 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
python解析xml文件实例分享
2013/12/04 Python
python实现用户登录系统
2016/05/21 Python
Python正则表达式完全指南
2017/05/25 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Django中URL的参数传递的实现
2019/08/04 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
会计电算化专业毕业生推荐信
2013/12/24 职场文书
竞选部长演讲稿
2014/04/26 职场文书
2014年学前班工作总结
2014/12/08 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
js之ajax文件上传
2021/05/13 Javascript
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
redis 解决库存并发问题实现数量控制
2022/04/08 Redis