封装的request请求方法

const requestModule = import.meta.env.VITE_REQUEST_MODULE
const requestBaseUrl = import.meta.env.VITE_BASE_URL
const imgUrl = import.meta.env.VITE_BASE_IMG_URL

function request(isDomain, url, method, data, header = {}, hideErrMsg = false, showLoading = false) {
  if (showLoading) {
    uni.showLoading({
      title: '加载中...',
      icon: 'loading'
    })
  }
  let urlLin = (requestModule + '/' + url).replace('//', '/')
  if (isDomain) {
    urlLin = url
  } else {
    // #ifndef H5
    urlLin = requestBaseUrl + '/' + urlLin
    // #endif
  }
  if (header['Content-Type'] && (header['Content-Type'].includes('application/x-www-form-urlencoded') ||
        header['Content-Type'].includes('multipart/form-data'))) {
    data = createFormData(data)
  }
  const token = uni.getStorageSync('token')
  if (token) {
    header['Manage-Token'] = token
  }
  return new Promise((resolve, reject) => {
    uni.request({
      url: urlLin,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json',
        ...header
      },
      success: function(res) {
        console.log('success::::', res)
        if (res.statusCode !== 200) {
          if (!hideErrMsg) {
            uni.showToast({
              title: parseStatusCodeErrMsg(res.statusCode),
              icon: 'none',
              duration: 2000
            })
          }
          reject(res)
        } else if (!res.data.errorCode || res.data.errorCode === '0') {
          resolve(res.data)
        } else if (res.data.errorCode === '10009') {
          uni.navigateTo({
            url: '/pages/login/index'
          })
        } else {
          if (!hideErrMsg) {
            uni.showToast({
              title: res.data.errorDetails,
              icon: 'error',
              duration: 2000
            })
          }
          reject(res)
        }
      },
      fail: function(res) {
        if (!hideErrMsg) {
          uni.showToast({
            title: '请求错误',
            icon: 'none',
            duration: 2000
          })
        }
        reject(res)
      },
      complete: function() {
        if (showLoading) {
          uni.hideLoading()
        }
      }
    })
  })
}

const parseStatusCodeErrMsg = (statusCode) => {
  if (statusCode === 200) {
    return ''
  } else if (statusCode === 404) {
    return '服务器资源不存在'
  } else if (statusCode === 403) {
    return '服务器资源禁止访问'
  } else if (statusCode === 502) {
    return '服务器无响应'
  } else if (statusCode === 504) {
    return '服务器响应超时'
  } else if (statusCode === 599) {
    return '网络链接超时'
  } else {
    return '服务器响应错误'
  }
}

function createFormData(obj = {}) {
  let formDataString = ''
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      if (Array.isArray(obj[key])) {
        // 处理数组属性
        for (const value of obj[key]) {
          formDataString += `${key}[]=${encodeURIComponent(value)}&`
        }
      } else {
        // 处理普通属性
        formDataString += `${key}=${encodeURIComponent(obj[key])}&`
      }
    }
  }
  // 去掉末尾的 '&'
  formDataString = formDataString.slice(0, -1)
  return formDataString
}

function get(obj) {
  return request(obj.isDomain, obj.url, 'GET', obj.data, obj.header, obj.hideErrMsg, obj.showLoading)
}

function post(obj) {
  return request(obj.isDomain, obj.url, 'POST', obj.data, obj.header, obj.hideErrMsg, obj.showLoading)
}

function formPost(obj) {
  return request(obj.isDomain, obj.url, 'POST', obj.data, {
    ...obj.header,
    'Content-Type': 'application/x-www-form-urlencoded'
  }, obj.hideErrMsg, obj.showLoading)
}

export default {
  imgUrl,
  request,
  get,
  post,
  formPost
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值