您好,欢迎访问一九零五行业门户网

axios封装fetch调用详解

这次给大家带来axios封装fetch调用详解,axios封装fetch的注意事项有哪些,下面就是实战案例,一起来看一下。
基础axios用法请看axios官网
//依赖于axios对私有ajax进行修改 import qs from 'qs' import axios from 'axios' import router from 'router/index' import {errorprompt, loading, closeloading} from 'util/util' export const status = {  success: '100',  net_err: '101', // 网络连接异常,请稍候再试  biz_err: '103', // 业务请求异常  no_auth: '104' } export function fetch(options) {  return new promise((resolve, reject) => {  let instance = axios.create({   baseurl: process.env.base_api,   timeout: 2000,   headers: {   // tracecode: window.encodeuricomponent(json.stringify({ua:,cv:20161230,token:3dwo0onuuspkvjcp8tk,os:windows10,app:kind,ws:1*1,pkey:f8caf7d7-a5d4-4710-b06f-28a922b6a467}))   tracecode: commonbizheader(ismanager(options)),   'content-type': 'application/x-www-form-urlencoded'   },   transformrequest: [function (data) {   // do whatever you want to transform the data   let ret = ''   for (let it in data) {    ret += encodeuricomponent(it) + '=' + encodeuricomponent(data[it]) + '&'   }   return ret   }]  });  instance.interceptors.request.use(function (response) {   // 请求拦截   loading();   return response;  }, function (error) {   console.log('error 请求拦截 : ', error)   return promise.reject(error);  });  instance(options)   .then(response => {    const res = response.data;    if (res.errorcode != status.success) {    switch (res.errorcode) {     case status.net_err: {     errorprompt(res.errormsg)     reject(res)     break;     }     case status.biz_err: {     errorprompt(res.errormsg)     reject(res)     break;     }     case status.no_auth: {     errorprompt(res.errormsg)     let session = require(storejs)     if (ismanager(options)) { // 管理端      session.remove(managerusertoken)      router.push({path: '/manager/login'})     } else {      session.remove(clientusertoken)      router.push({path: '/client/login'})     }     reject(res)     break     }    }    }    closeloading();    resolve(res);   }).catch(error => {    closeloading();    errorprompt('网络连接错误,请检查您的网络')    console.log('error', error); // for debug    reject(error);   });  }); } function commonbizheader (ismanager) {  let session = require(storejs);  let params = {}  params['ua'] = window.navigator.useragent.tolowercase()  params['cv'] = '123456'  params['ws'] = window.screen.height + '*' + window.screen.width  params['token'] = 123456  params['os'] = window.navigator.appcodename  if (ismanager) {  params['token'] = session.get('managerusertoken') // 管理 - 用户令牌  } else {  params['token'] = session.get('clientusertoken') // 用户 - 用户令牌  }  params['app'] = 'kind'  let uuid = session.get('pkey')  if (!uuid) {  uuid = getuuid()  window.localstorage.setitem('pkey', uuid)  }  return encodeuricomponent(json.stringify(params)) } function ismanager(options) {  return options && options.url && options.url.indexof(/api/worker) != -1 } /**  * 获取uuid  * @returns {string}  */ export function getuuid() {  let len = 32 // 32长度  let radix = 16 // 16进制  let chars = '0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'.split('')  let uuid = []  let i  radix = radix || chars.length  if (len) {  for (i = 0; i < len; i++) { uuid[i] = chars[0 | math.random() * radix] } } else { var r uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' uuid[14] = '4' for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | math.random() * 16 uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r] } } } return uuid.join('').tolowercase() }
这是在vue的项目中:在api中调用方法如下(react刚开始学,还在做简单demo)
import {fetch} from 'api/fetch' export const callauthcode = (userphone) => {  return fetch({  url: '/api/auth/code',  method: 'post',  data: ({   userphone: userphone,  }),  }) }
因为我们这边的后台要求严格区分get/post请求,所以封装的方法调用中必须带有method,如后台已经处理好,全部可进行post请求,则可以参照axios官网里面将方法全部改为.post
关于fetch方法的说明:主要进行封装了请求拦截,响应拦截,默认请求体由json格式转换form格式,当然,这些都是在axios官网里可以找到的,不过是集合下了而已
关于请求头部分请不要直接套用,这是我们这边后台要求特殊配置的,后台接口三端共用,必须区分是哪里在调用
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
js自动计算酒店住宿费用
图片加载完毕前显示加载圈的效果
datepicker怎么使用
以上就是axios封装fetch调用详解的详细内容。
其它类似信息

推荐信息