微信小程序中如何使用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脚本实现Web页面信息交互
Oct 11 Javascript
js中格式化日期时间型数据函数代码
Nov 08 Javascript
Jquery下判断Id是否存在的代码
Jan 06 Javascript
jQuery Ajax异步处理Json数据详解
Nov 05 Javascript
基于insertBefore制作简单的循环插空效果
Sep 21 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
vue 动态修改a标签的样式的方法
Jan 18 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
react native 仿微信聊天室实例代码
Sep 17 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python获取代码运行时间的实例代码
2018/06/11 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python实现大转盘抽奖效果
2019/01/22 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
2014年党员承诺书范文
2014/05/20 职场文书
承诺书格式范文
2014/06/03 职场文书
诚实守信演讲稿
2014/09/01 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
2015年酒店工作总结
2015/04/28 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
python本地文件服务器实例教程
2021/05/02 Python
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS
MySQL分区路径子分区再分区
2022/04/13 MySQL