axios 封装请求

axios 封装请求

用于统一管理 接口请求

如果需要在此文件中用于其他方法的文件可以:

// 
import { getIMEI } from './utils'
// getIMEI() 来进行使用
const baseURL = '你请求的接口地址'; 

let Token:string = '';
let RefreshToken:string = '';
let UserId:string = '';
let UserPhone:string = '';
let openid:string = "";
const version:string = '3.3.2';
let systemInfo:object | string = "";
let requestlist : Array<any> = []
let is_freshing: boolean = false
let is_login: boolean = false
let is_loginroutet:boolean = false
// 以上是声明的变量用的是ts
// type RequestMethod = "OPTIONS" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT" | undefined
namespace RequestFunc {
    //request请求
    type RequestData<T> = {
      /** 请求方式 */
      methodType?: 'GET' | 'POST'
      /** 传递的数据 */
      data?: T
      /** 路径 */
      url: string
    }
    //请求设置
    export type RequestConfig = {
      /** 父路径 */
      baseUrl?: string
      /** 请求头 */
      header?: any
      /** 传递的data数据类型 */
      dataType?: string
    }
    //返回数据类型
    type RequestReturnData<T> = {
      code: 200 | 500 | number
      data: T
    }
    /**
     * request请求
     */
    export type request = <R = AnyObject, T = AnyObject>(
      data: RequestData<T>,
      config?: RequestConfig,
    ) => Promise<RequestReturnData<R>>
  }
  uni.getSystemInfo({
    success(res) {
        systemInfo = JSON.stringify(res);
    }
});

 const request: RequestFunc.request = (
    { methodType = 'GET', data = {}, url = '' },
    { baseUrl = baseURL, header = {}, dataType = 'json' } = {},
  )  => {
  // 接口请求所带的共同的参数
    Token = uni.getStorageSync('LastLoginUserToken');
    RefreshToken = uni.getStorageSync('LastLoginRefreshToken');
    UserId = uni.getStorageSync('LastLoginUserUserId');
    UserPhone = uni.getStorageSync('LastLoginUserPhone');    
    let allheader = {
        'content-type': 'application/json',
        'Token': Token,
        'UserId': UserId,
        'IMEI': getIMEI(),
        'LoginName': UserPhone,    
        'Client': 'PPGHZ', //systemInfo,
        'Version': version,
    };
    return new Promise((resolve, reject) => {
        uni.request({
            method: methodType,
            url: baseUrl + url,
            data: data,
            header: Object.assign(allheader,header),
            dataType: dataType, 
            success:response => {
                let res = response as any;   

                if(res.data.ReturnCode == -10) {
                    if(!is_loginroutet) {
                        uni.navigateTo({
                            url: '/pages/login/index',
                        });
                    }
                    is_loginroutet = true
                    handleReLogin()
                    if(!is_login) {
                        // refreshLoginRequst()
                   }
                } else if (res.data.ReturnCode == -20) {
                    if(!is_freshing) {
                         refreshTokenRequst()
                    }
                    resolve(new Promise(resolve => {
                        requestlist.push(() => {
                          
                            if(methodType==='GET') {
                                resolve(get(url,data))
                            } else {
                                resolve(post(url,data))
                             }
                        })
                    }))
                }
                 else {
                    resolve(res.data);
                }
            },
            fail:err => {
                reject(err)
            }
        })
    });
}
function handleReLogin() {
    setTimeout(() => {
        is_loginroutet = false
    },3000)
}
//get请求
export const get = <R = AnyObject, T = AnyObject>(
    url: string,
    data?: T,
    config?: RequestFunc.RequestConfig,
  ) =>
  request<R, T>(
      {
        methodType: 'GET',
        url: url,
        data,
      },
      config,
    )
  
  //post请求
  export const post = <R = AnyObject, T = AnyObject>(
    url: string,
    data?: T,
    config?: RequestFunc.RequestConfig,
  ) =>
  request<R, T>(
      {
        methodType: 'POST',
        url: url,
        data,
      },
      config,
    )
const refreshTokenRequst = () => {
    is_freshing = true
    Token = uni.getStorageSync('LastLoginUserToken');
    RefreshToken = uni.getStorageSync('LastLoginRefreshToken');
    let header = {
        'content-type': 'application/json',
        'IMEI': openid,
        'LoginName': UserPhone,
        'Client': 'PPGHZ', //systemInfo,
        'Version': version,
    }
    post("Token/RefreshToken",{
        Token: Token,
        RefreshToken: RefreshToken
    }).then(res => {
        is_freshing = false
        let d:any = res
        if(d.ReturnCode > 0) {
            Token = d.ReturnData.Token
            RefreshToken = d.ReturnData.RefreshToken 
            uni.setStorageSync('LastLoginRefreshToken',RefreshToken);
            uni.setStorageSync('LastLoginUserToken',Token);
            if(requestlist.length>0){ 
                requestlist.map((cb:any) => cb())
                requestlist = []
            }
        }
    }).catch(error => {
        console.log(error)
        is_freshing = false
    })
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值