微信小程序中如何使用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 相关文章推荐
枚举JavaScript对象的函数
Dec 22 Javascript
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
YUI模块开发原理详解
Nov 18 Javascript
JavaScript中的getTime()方法使用详解
Jun 10 Javascript
一道JS前端闭包面试题解析
Dec 25 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
AngularJs验证重复密码的方法(两种)
Nov 25 Javascript
解析js如何获取css样式
Dec 11 Javascript
jquery根据name取得select选中的值实例(超简单)
Jan 25 jQuery
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
Node.js API详解之 vm模块用法实例分析
May 27 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
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
js常用DOM方法详解
2017/02/04 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
vue动态生成dom并且自动绑定事件
2017/04/19 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
利用three.js画一个3D立体的正方体示例代码
2017/11/19 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
jQuery实现购物车的总价计算和总价传值功能
2018/11/28 jQuery
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
Python实现的选择排序算法示例
2017/11/29 Python
Python输出各行命令详解
2018/02/01 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
普通员工辞职信
2014/01/17 职场文书
高中生评语大全
2014/04/25 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
python中sys模块的介绍与实例
2021/04/17 Python