微信小程序中如何使用flyio封装网络请求

 更新时间:2019年07月03日 11:35:03   作者:奋斗的七月   我要评论

这篇文章主要介绍了微信小程序中如何使用flyio封装网络请求,fly.js 通过在不同 javascript 运行时通过在底层切换不同的 http engine来实现多环境支持,但同时对用户层提供统一、标准的promise api,需要的朋友可以参考下

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.24280'http://---开发调试环境
//export const baseurlapi = 'https://test.mini.com'http://---测试环境https
//export const baseurlapi = 'https://product.mini.com'http://---生产环境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 = {
    phones: '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("收藏成功");
    }
   });
  }
 }

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

相关文章

最新评论