微信小程序中如何使用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 相关文章推荐
利用onresize使得div可以随着屏幕大小而自适应的代码
Jan 15 Javascript
jQuery 学习入门篇附实例代码
Mar 16 Javascript
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
JS调用CS里的带参方法实例
Aug 01 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
JavaScript中双叹号!!作用示例介绍
Sep 21 Javascript
Vue.js实现无限加载与分页功能开发
Nov 03 Javascript
原生js实现打字动画游戏
Feb 04 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
Nov 20 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
Oct 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
PHP daddslashes 使用方法介绍
2012/10/26 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
商场端午节活动方案
2014/01/29 职场文书
奥林匹克的口号
2014/06/13 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
2014年班级工作总结
2014/11/14 职场文书
歌咏比赛主持词
2015/06/29 职场文书
企业财务管理制度范本
2015/08/04 职场文书
解析Java中的static关键字
2021/06/14 Java/Android
vue实力踩坑之push当前页无效
2022/04/10 Vue.js