axios 封装及取消请求

摘要:
d) {returnPromise.reject(d);}如果(loadingtext){Toast.loading({message:loadingtext | |'正在上载…',forbidClick:false,持续时间:9000,});}Letkey=“密钥字符串”;lettime=数学楼层((newDate())。getTime());letdataStr=“”;letapisign=md5(键+时间+数据Str);letuserinfo=Vue.prototype。获取Cookie('userinfo');如果(userinfo==null||userinfo==“”|| userinfo==undefined){userinfo={token:'',uid:''};}否则{userinfo=JSON.parse(userinfo);}lettoken=用户信息。标记||'';letuid=用户信息。uid |“”;letappHead={'id':uid||0,'token':token||'','sign':apisign||''、'version':1,'source':'adroid','area':'CN','time':time,};returnmyHttp({method:type,url:app.fileHost+“/app”+url+“?folder=kangtai”,data:d,cancelToken:source?

axios通用function封装 start

  • http.js
  • 引入了移动端 vant 框架
  • 注:接口地址,加密秘钥,签名方式 根据实际情况而定适当修改
import axios from 'axios';
import md5 from 'md5';
import Vue from 'vue';
import { Toast,Dialog } from 'vant';
Vue.use(Toast);
Vue.use(Dialog);

import vm from '@/main.js'
import appconfig from "./appconfig";

var app = {};
app.host = appconfig.host;
app.fileHost = appconfig.upload_host;


//实例化 axios;
const myHttp = axios.create({
    baseURL: app.host,
    timeout: 15000,
    headers: {'Content-Type': 'application/json;charset=UTF-8'}
});

// 请求时候拦截器;发送数据之前处理的内容;
myHttp.interceptors.request.use((config) => {
    return config;
}, (err) => {
    return Promise.reject(err,'拦截器错误');
});


/**
  var CancelToken = axios.CancelToken;
  var source = CancelToken.source();
  取消请求; 接口传入source  source.cancel(); 就可以取消发出的请求了;
  @param url  地址
  @param type  请求类型;
  @param d     参数 object
  @param loadingtext  loading 提示文字;
  @param source   取消令牌token;
 */
app.http = (url,type,d,loadingtext,source) => {
    if(!d){
        return Promise.reject(d);
    }
    if(loadingtext){
        Toast.loading({
            message: loadingtext,
            forbidClick: false,
            duration:9000,
        });
    }
    let key = "秘钥字符串";
    let time = Math.floor((new Date()).getTime());
    let dataStr = JSON.stringify(d);

    let apisign = md5(key + time + dataStr);
    let userinfo = Vue.prototype.getCookie('userinfo');

    if(userinfo == null || userinfo == "" || userinfo == undefined){
        userinfo = {token:'',uid:''};
    }else{
        userinfo = JSON.parse(userinfo);
    }
    let token = userinfo.token||'';
    let uid = userinfo.uid||'';
    let appHead = {
        'uid':uid||0,
        'token':token||'',
        'sign':apisign||'',
        'version':1,
        'source':'android',
        'area':'CN',
        'time':time,
    };

    return myHttp({
        method:type,
        url: "/app"+url,
        data: d,
        cancelToken: source.token,
        headers:{appHead:JSON.stringify(appHead),'Content-Type':'application/json;charset=UTF-8'},
        timeout:15000,

    });
};

// 上传图片到阿里云
app.ImgUpload = (url, type, d,loadingtext,source)=>{
    if(!d){
        return Promise.reject(d);
    }
    if(loadingtext){
        Toast.loading({
            message: loadingtext||'上傳中...',
            forbidClick: false,
            duration:9000,
        });
    }
    let key = "秘钥字符串";
    let time = Math.floor((new Date()).getTime());
    let dataStr = '';

    let apisign = md5(key + time + dataStr);
    let userinfo = Vue.prototype.getCookie('userinfo');

    if(userinfo == null || userinfo == "" || userinfo == undefined){
        userinfo = {token:'',uid:''};
    }else{
        userinfo = JSON.parse(userinfo);
    }
    let token = userinfo.token||'';
    let uid = userinfo.uid||'';
    let appHead = {
        'uid':uid||0,
        'token':token||'',
        'sign':apisign||'',
        'version':1,
        'source':'android',
        'area':'CN',
        'time':time,
    };

    return myHttp({
        method:type,
        url: app.fileHost+"/app"+url+"?folder=kangtai",
        data: d,
        cancelToken: source?source.token:"", // 每次请求取消凭证;
        headers:{appHead:JSON.stringify(appHead),'Content-Type':'application/json;charset=UTF-8'},
        timeout:15000,
    });
}


// 响应时候拦截器;
myHttp.interceptors.response.use((response) => {
    vm.$toast.clear();
    // 对响应的数据再做什么处理; 判断登录是否失效,判断其他错误;
    if(response.status == 500){
        console.log(response.status);
    }
    else if(response.status >= 400){
        console.log(response.status);
    }
    else if(response.status >= 300){
        console.log(response.status);
    }
    else if(response.status == 200){
        return response.data;
    }
    else{
        console.log(response.status);
    }

}, (err) => {
    vm.$toast.clear();
    if (axios.isCancel(err)) {
        console.log('取消本次请求', err.message); // err.message 是调用 source.cancel('取消成功'); 传入的参数
        return Promise.reject(err);
    } else {
        return Promise.reject(err);
    }
});

export default app

axios通用function封装 end


外部 页面调用 start

// 以上传图片为例
afterRead(files){
  var that = this;    
  var fmData  = new FormData()
  fmData.append('files',files.file)
  fmData.append('folder','test')
  console.log(fmData);
  // 生成 取消 令牌
  let CancelToken = axios.CancelToken;
  let source = CancelToken.source();
  this.source = source;

  app2.ImgUpload("/oss/imgs",'post',fmData,'上傳中...',source)
  .then(res=>{
     if(res.status == 1){
	  console.log(res.data);
	  this.$toast({message:res.info});
      }else{
	  this.$toast({message:res.info});
      }
   })
   .catch(err=>{
       console.log(err);
   });

    // 一秒后直接取消上传
   setTimeout(()=>{
       this.source.cancel('取消请求'); // 参数可选
   },1000)
      
}

外部 页面调用 end

免责声明:文章转载自《axios 封装及取消请求》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MP4v2 基本使用(二)win7系统提示0x80072F8F错误代码的解决方法(刷新你的认知)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SpreadJS 纯前端表格控件 V12.2 发布更新

用不到100行代码,在前端实现Excel的全部功能 千万前端开发者翘首企盼,SpreadJS V12.2 终发布更新:六大功能特性,带来更多便利,用不到100行代码,在前端实现Excel的全部功能! SpreadJS 是一款基于 HTML5 的纯前端电子表格控件,以“高速低耗、高度类似Excel、可无限扩展”为产品特色,提供移动跨平台和浏览器支持,同时满...

【开发工具】OpenLive使用总结

一、OpenLive软件安装 ①下载地址 http://openlivewriter.org/ ②安装 (基本上下一步就行) 二、使用SyntaxHighlighter实现代码高亮 ①下载插件 https://files-cdn.cnblogs.com/files/memento/Memento.OLW_V1.0.0.0.7z ②将解压后的两个dll...

ZUI开发人员选项

开启开发者模式:开发人员选项原本是隐藏的开启方法:设置-关于手机-ZUI版本号,快速点击直到出现已开启开发者模式即可。(注意,是ZUI版本号,不是系统版本号,也不是Android版本。) 当我们需要连接电脑的时候,也必须要打开USB调试才能正确的连接到手机助手软件或者刷机软件,这个功能也是在开发者选项里面的。...

uniapp app-plus pages.json

app-plus Object 设置编译到 App 平台的特定样式,配置项参考下方 app-plus App 参考地址 https://uniapp.dcloud.io/collocation/pages app-plus配置编译到 App 平台时的特定样式,部分常用配置 H5 平台也支持。以下仅列出常用,更多配置项参考 WebviewStyles。 ti...

WebAPI常见的鉴权方法,及其适用范围

在谈这个问题之前,我们先来说说在WebAPI中保障接口请求合法性的常见办法: API Key + API Secret cookie-session认证 OAuth JWT  当然还有很多其它的,比如 openid connect (OAuth 2.0协议之上的简单身份层),Basic Auth ,Digest Auth 不一一例举了 1、API Ke...

5+ App开发入门指南

HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能。 HTML5 Plus规范 通过HTML5开发移动App时,会发现HTML5很多能力不具备。为弥补HTML5能力的不足,在...