在小程序/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 相关文章推荐
jQuery EasyUI API 中文文档 - ValidateBox验证框
Oct 06 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
jQuery实现图片走马灯效果的原理分析
Jan 16 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
May 18 Javascript
AngularJS基础 ng-include 指令简单示例
Aug 01 Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 Javascript
深入理解javascript中concat方法
Dec 12 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
Jul 20 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 Javascript
uni-app 支持多端第三方地图定位的方法
Jan 03 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默认安装产生系统漏洞
2006/10/09 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
python实时监控logstash日志代码
2020/04/27 Python
从python读取sql的实例方法
2020/07/21 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
NULL是什么,它是怎么定义的
2015/05/09 面试题
软件测试题目
2013/02/27 面试题
商业活动邀请函
2014/02/04 职场文书
活动策划邀请函
2014/02/06 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
代领报检证委托书范本
2014/10/11 职场文书
2015年清明节活动总结
2015/02/09 职场文书
交通安全主题班会
2015/08/12 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
详解Js模块化的作用原理和方案
2021/04/29 Javascript
手把手教你导入Go语言第三方库
2021/08/04 Golang
python中mongodb包操作数据库
2022/04/19 Python