在小程序/mpvue中使用flyio发起网络请求的方法


Posted in Javascript onSeptember 13, 2018

Fly.js 一个基于Promise的、强大的、支持多种JavaScript运行时的http请求库. 有了它,您可以使用一份http请求代码在浏览器、微信小程序、Weex、Node、React Native、快应用中都能正常运行。同时可以方便配合主流前端框架 ,最大可能的实现 Write Once Run Everywhere。

Flyio Github: https://github.com/wendux/fly

问题

随着 Weex 、mpvue 的发布,他们都是支持Vue.js语法。目前vue已经你能够运行在浏览器、小程序和Native了。尽管各个平台仍有差异,但已经基本能实现 Write Once Run Everywhere 。这使得我们可以在多个端上实现尽可能大限度在代码复用。但是无论是 vue 还是Weex 、mpvue,它们本质上都只是一个View层,也就说最好的情况,也只能实现UI复用。但对于一个应用程序来说,除了UI,最重要的就是数据了,而数据来源一般都是来自网络请求(大多数都是http)。在使用这些框架时,您的网络请求,都需要使用平台特定的API!这很糟糕,意味着您网络请求的代码不能复用,所以尽管UI可以复用,但我们还需要去适配网络请求部分的代码。

Flyio简介

要上述问题,就需要一个能支持多个平台网络库,用户层提供统一的API,将平台差异在底层屏蔽。而 Fly.js就是这酱紫的一个网络库,为了方便axios使用者迁移,fly.js API设计风格和axios相似(但不完全相同)!

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

支持快应用

快应用是九大手机厂商基于硬件平台共同推出的新型应用生态。用户无需下载安装,即点即用,享受原生应用的性能体验。快应用采用web开发技术栈,使用JavaScript语言开发,flyio官方在第一时间支持了快应用。具体使用参照下面文档。

标准的API

Fly在上层提供了一套标准的API,这样,您就可以在各个JavaScript环境中,以相同的方式发起网络请求,不同平台对应一个平台相关的adapter,将平台差异在底层屏蔽,使用时不同平台只需要引入flyio npm包中相应平台的入口文件即可,也正是因为如此,fly在各个平台下都可以保证轻量(没有冗余代码)。

同时,为了方便axios使用者迁移,fly.js API设计风格和axios相似(但不完全相同)!

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

github.com/wendux/fly

已支持的平台

目前Fly.js支持的平台包括:Node.js 、微信小程序 、Weex、React Native 、Quick App 和浏览器,这些平台的 JavaScript 运行时都是不同的。更多的平台正在持续添加中,请保持关注。

微信小程序

微信小程序采用web开发技术栈,使用JavaScript语言开发,但是JavaScript运行时和浏览器又有所不同,导致axios、jQuery等库无法在微信小程序中使用,而flyio可以。下面给出具体使用方法

引入fly

Flyio在各个平台下的标准API是一致的,只是入口文件不同,在微信小程序中引入:

Npm安装:npm install flyio --save.

var Fly=require("flyio/dist/npm/wx") 
var fly=new Fly

如果您的微信小程序项目没有使用npm来管理依赖,您可以直接下载源码到您的小程序工程,下载链接wx.js 或wx.umd.min.js 下载任意一个,保存到本地工程目录,假设在“lib”目录,接下来引入:

var Fly=require("../lib/wx") //wx.js为您下载的源码文件
var fly=new Fly; //创建fly实例

引入之后,您就可以对fly实例进行全局配置、添加拦截器、发起网络请求了。

使用

Fly 基于Promise提供了Restful API,你可以方便的使用它们,具体请参考fly 文档 。下面给出一个简单的示例

//添加拦截器
fly.interceptors.request.use((config,promise)=>{
  //给所有请求添加自定义header
  config.headers["X-Tag"]="flyio";
  return config;
})
//配置请求基地址
fly.config.baseURL='http://www.dtworkroom.com/doris/1/2.0.0/'
...

Page({
 //事件处理函数
 bindViewTap: function() {
  //发起get请求
  fly.get("/test",{xx:6}).then((d)=>{
   //输出请求数据
   console.log(d.data)
   //输出响应头
   console.log(d.header)
  }).catch(err=>{
   console.log(err.status,err.message)
  })
  ...
 })
})

在mpvue中使用
在mpvue  中您也可以将fly实例挂在vue原型上,这样就可以在任何组件中通过this方便的调用:

var Fly=require("flyio/dist/npm/wx") 
var fly=new Fly
... //添加全局配置、拦截器等
Vue.prototype.$http=fly //将fly实例挂在vue原型上

在组件中您可以方便的使用:

this.$http.get("/test",{xx:6}).then((d)=>{
   //输出请求数据
   console.log(d.data)
   //输出响应头
   console.log(d.header)
  }).catch(err=>{
   console.log(err.status,err.message)
  })

反馈

如果您有问题欢迎在 在github 提issue . fly.js github: github.com/fly

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

Javascript 相关文章推荐
javascript sudoku 数独智力游戏生成代码
Mar 27 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
jquery中获取元素里某一特定子元素的代码
Dec 02 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
微信小程序开发教程之增加mixin扩展
Aug 09 Javascript
bootstrap+jquery项目引入文件报错的解决方法
Jan 22 jQuery
vue实现从外部修改组件内部的变量的值
Jul 30 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
Sep 13 #Javascript
mpvue中使用flyjs全局拦截的实现代码
Sep 13 #Javascript
AngularJS修改model值时,显示内容不变的实例
Sep 13 #Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 #Javascript
vue的全局变量和全局拦截请求器的示例代码
Sep 13 #Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 #Javascript
vue interceptor 使用教程实例详解
Sep 13 #Javascript
You might like
php 引用(&)详解
2009/11/20 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
Vue渲染函数详解
2017/09/15 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
python executemany的使用及注意事项
2017/03/13 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
Python中常见的异常总结
2018/02/20 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
优秀实习生感言
2014/03/01 职场文书
房产代理公证处委托书
2014/04/04 职场文书
付款委托书范本
2014/10/05 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书