原生微信小程序flyio封装多baseURL配置请求,如同axios一样非常爽利的使用api

原生微信小程序flyio封装多baseURL配置请求,如同axios一样非常爽利的使用api1.下载引入flyio基于promiseJavascripthttp请求的终极解决方案。也就是说,在任何能够执行Javascript的环境,只要具有访问网络的能力,Fly都能运行在其上,提供统一的API。fly下载地址2.request.js配置fly请求体//importFlyfrom’flyio/dist/npm/wx’;constFly=…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

1.下载 引入 flyio 基于 promise Javascript http请求的终极解决方案。也就是说,在任何能够执行 Javascript 的环境,只要具有访问网络的能力,Fly都能运行在其上,提供统一的API。 fly下载地址

2.request.js 配置fly 请求体

// import Fly from 'flyio/dist/npm/wx';
const Fly = require("flyio.js");
const fly = new Fly();

//设置超时
fly.config.timeout = 20000;

// 获取白名单
import whiteList from './whiteList';

//添加请求拦截器
fly.interceptors.request.use((request) => {
  // console.log('进入fly-request', request);
  wx.showLoading({
    'title': '加载中',
    'mask': true
  });
  // 不显示加载页面的接口
  if (whiteList.loading.indexOf(request.url) === -1) {
    // 隐藏loading遮罩
    wx.hideLoading();
  }
  // 请求资源服务器时,不添加token
  if (whiteList.nullHeaderToken.indexOf(request.url) !== -1) {
    request.timeout = 30000; // 请求超时
    request.headers = {
      'content-type': 'application/json',
      'X-Tag': 'flyio'
    };
    console.log('nullHeaderToken()')
    return request;
  }
  fly.lock();//锁住请求
  // 延迟发请求 等 getStorageSync 存储
  if (wx.getStorageSync('Authorization')) {
    // 给所有请求添加自定义header
    request.timeout = 30000;
    request.headers = {
      'content-type': 'application/json',
      'X-Tag': 'flyio',
      'Authorization': 'Bearer ' + wx.getStorageSync('Authorization')
    };
    fly.unlock();//解锁请求
    return request;
  } else {
    console.log('没有token跳转登录');
    setTimeout(() => {
      wx.redirectTo({
        url: '../login/login'
      });
    }, 300)
  }
}, (error, promise) => {
  // Do something with request error
  console.log(error); // for debug
  promise.reject(error)
});

//添加响应拦截器,响应拦截器会在then/catch处理之前执行
fly.interceptors.response.use(
  (response) => {
    wx.hideLoading();
    console.log('interceptors数据', response.data);
    //只将请求结果的data字段返回
    return response.data
  },
  (err, promise) => {
    wx.hideLoading();
    let msg = '';
    if (err.status === 0) {
      msg = '网络连接异常'
    } else if (err.status === 1) {
      msg = '网络连接超时'
    } else if (err.status === 401) {
      msg = '用户未登录'
    } else {
      if (err.response.data.message) {
        msg = err.response.data.message
      } else {
        msg = '请求数据失败,请稍后再试'
      }
    }
    wx.showToast({
      title: msg,
      icon: 'none',
      duration: 2000
    });
    setTimeout(() => {
      console.log('fly.interceptors.err-toLogin')
      wx.redirectTo({
        url: '../login/login'
      });
    }, 500)
    return promise.resolve(err)
  }
);
// Vue.prototype.$http=fly //将fly实例挂在vue原型上

export default fly

 

3. baseUrlConfig.js 

/**
 *  定义各个API的 baseURL
 */
const baseURL = {
  'UAA': 'https://xxx1.com/uaa', // uaa 获取token
  'IDC': 'http://xxx2:8580/idc-admin', // idc 相关业务
  'IDCtest': 'http://10.2.5.163:8790' // 本地开发
};
export default baseURL;

4.whiteList.js 白名单

export default {
  // 不显示加载提示
  loading: [
    '/route/list'
  ],
  // 不重定向白名单
  route: [
    '/login'
  ],
  // 不带token的url
  nullHeaderToken: [
    '/user/weChatLogin'
  ]
}

5.业务api  获取token api

注意1 是 使用 fly.request

注意2  fly请求参数 是放置在 body 上 而不是 data:data

注意3 要使用另外 baseUrl 只需要写上对应的 baseURL: baseURL.UAA 即可 

import fly from '../../request.js'
import baseURL from '../../baseUrlConfig.js'

// 图表 表11 FleetList 查询车队列表
export function getReport11FleetList(query) {
  return fly.request({
    baseURL: baseURL.IDC,
    url: '/report11/getReport11FleetList?fleetName=' + query,
    method: 'get'
  })
}

// 图表 表11 FleetName 查询
export function getReport11ListByFleetName(data) {
  return fly.request({
    baseURL: baseURL.IDC,
    url: '/report11/getReport11ListByFleetName',
    method: 'post',
    body: data
  })
}

// uaa登录
export function userWeChatLogin(data) {
  // console.log('userWeChatLogin()', data)
  return fly.request({
    baseURL: baseURL.UAA,
    url: '/user/weChatLogin',
    method: 'post',
    body: data
  })
}

// 单个api 针对的相应 各项配置
// 获取 token 登录 
export function userLogin(data) {
  return fly.request({
    headers: {
      'Authorization': 'Basic b3A6b3A=',
    }, // headers 配置
    timeout: '30000', // 超时时间
    baseURL: baseURL.IDC, // 请求后端地址
    url: '/auth/form', // 请求api
    method: 'post', // 请求格式
    body: data // 请求参数
  })
}

6. 微信小程序里使用api 举例

import * as ChartsAPI from '../../../../wxapi/api/charts/charts.js'
// 根据自己的 文件放置 配置自己的文件引用路径
userLogin: function() {
       wx.showLoading({
          title: '加载中',
       })
        const toParams = {
          "username": that.data.inputValueUsername,
          "password": that.data.inputValuePwd,
          "grantType": "password",
          "clientId": "devops",
          "clientSecret": "devops"
        }
        
        ChartsAPI.userWeChatLogin(toParams).then(res => {
          if (res.data && res.data.access_token) {
            wx.showToast({
              title: "登录成功",
              icon: "success",
              duration: 1500
            })
            let resToken = res.data.access_token
            wx.setStorageSync('Authorization', resToken)
            setTimeout(() => {
              wx.redirectTo({
                url: '../index/index'
              })
            }, 1500)      
          }
          wx.hideLoading()
        }).catch(err => {
          wx.hideLoading()
          wx.showToast({
            title: "用户或密码错误",
            icon: "none",
            duration: 1500
          })
          console.log('error', err)
        })

}
        

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196607.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • MySQL存储过程(PROCEDURE)(一)「建议收藏」

    MySQL存储过程(PROCEDURE)(一)「建议收藏」一、定义与目的:定义:存储过程是数据库SQL语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数

    2022年7月2日
  • jquery的validationEngine表单验证

    jquery的validationEngine表单验证本文主要引用https://www.cnblogs.com/aliger/p/3898216.html基于jquery的validationEngine表单验证插件,根据官网提示,该插件支持IE6-

    2022年7月3日
  • java设计模式之建造者模式

    本文属于23种设计模式系列。 介绍的是建造者模式。

    2022年3月11日
  • 线程同步的四种方式

    线程同步的四种方式转载地址: http://blog.csdn.net/ebowtang/article/details/29905309一,什么是线程同步和互斥同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。这里的同步千万不要理解成那个同时进行,应是指协同、协助、互相配合。线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过…

    2022年7月15日
  • spring boot 系列之三:spring boot 整合JdbcTemplate

    前面两篇文章我们讲了两件事情:这篇文章我们来看下怎么通过JdbcTemplate进行数据的持久化。废话不多说,直接上干货。一、代码实现packagecom.study.entity;pub

    2022年2月16日
  • 关系数据理论-数据库习题

    关系数据理论-数据库习题设有关系W(工号,姓名,工种,定额),将其规范化到第三范式正确的答案是()。A.W1(工号,姓名),W2(工种,定额)B.W1(工号,工种,定额),W2(工号,姓名)C.W1(工号,姓名,工种),w2(工种,定额)D.以上都不对正确答案:C3NF要求没有部分依赖和传递依赖,“定额”直接依赖“工种”,传递依赖“工号”。规范化的实质是概念的单一化,“一事一地”,一个关系只描述一个概念。规范化理论是关系数据库进行逻辑设计的理论依据。根据这个理论,关系数据库中的关系必须满

    2022年10月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号