在小程序/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获取网页中的js、css、Flash等文件
Dec 20 Javascript
关于flash遮盖div浮动层的解决方法
Jul 17 Javascript
Jquery 插件开发笔记整理
Jan 17 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
Mar 20 Javascript
AngularJS实现分页显示数据库信息
Jul 01 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
Vue.js数据绑定之data属性
Jul 07 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
基于dataset的使用和图片延时加载的实现方法
Dec 11 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
Mar 26 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js精度溢出解决方案
2012/12/02 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
Python入门篇之面向对象
2014/10/20 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python爬取网易云音乐评论
2018/11/16 Python
flask session组件的使用示例
2018/12/25 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
python禁用键鼠与提权代码实例
2019/08/16 Python
python kafka 多线程消费者&手动提交实例
2019/12/21 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
捐款倡议书
2014/04/14 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2014年个人售房协议书
2014/10/30 职场文书
个人党性分析总结
2015/03/05 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python