axios 封装

该博客介绍了如何对axios进行封装,以统一处理请求异常并优化数据获取。通过设置超时时间、请求头,以及处理不同类型的HTTP请求,如GET、POST、PUT和DELETE。当请求成功或失败时,会根据不同的响应代码执行相应的操作,如显示错误消息、跳转登录页或返回数据。此外,还包含了一个检查状态的辅助函数来确保只有正确的响应才会被返回。
摘要由CSDN通过智能技术生成

axios封装

/*
 * 发送一步ajax请求的函数模块
 * 封装axios库
 * 函数返回值是promise
 * 1、优化:统一处理请求异常
 *       在外层包装一个promise,通过promise的resolve, reject函数处理异常
 * 2、异步得到的不是response,而是response.data
 */

import axios from 'axios'
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth'
import router from '@/router/index'
import store from '@/store'
axios.defaults.timeout = 50000 // 超时时间
axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
// response interceptor
axios.interceptors.response.use(
  response => {
    return response
  },
  error => {
    return Promise.resolve(error.response)
  }
)

export default function http (url, data = {}, requirtType = 'POST', config = {}) {
  const type = requirtType.toUpperCase()
  if (getToken()) axios.defaults.headers.token = `${getToken()}` // token
  return new Promise((resolve, reject) => {
    // 1.执行一步请求 成功调用resolve,失败调用reject
    let promise
    if (type === 'GET') {
      promise = axios.get(url, {
        params: data
      })
    } else if (type === 'DELETE') {
      promise = axios.delete(url, {
        data: data
      })
    } else if (type === 'PUT') {
      promise = axios.put(url, data)
    } else if (type === 'POST') {
      promise = axios.post(url, data, config)
    }
    // 成功调用resolve
    promise.then(response => {
      return checkStatus(response, resolve)
    }).then(response => {
      if (response.data.code === 0) { // 请求成功
        resolve(response.data.data || response.data.code)
      } else if (response.data.code === 40001) { // 请求失败
        Message({
          message: response.data.msg,
          type: 'error'
        })
        resolve(response.data.data || response.data.code)
      } else if (response.data.code === 30001) { // 请重新登录
        Message({
          message: response.data.msg,
          type: 'error'
        })
        store.dispatch('login/resetToken') // 清空用户信息
        router.push(`/login`) // 跳入登录页面
      } else if (response.data.code === 80001) { // 查重提示
        resolve(response.data)
        Message({
          message: response.data.msg,
          type: 'warning'
        })
      }
    }).catch(error => { // 请求异常
      console.log(error, 'error')
      Message.error(error || '请求数据异常')
    })
  })
}

// 如果http状态码正常,则直接返回数据
function checkStatus (response, resolve) {
  console.log(response, '-------')
  if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
    return response
    // 如果不需要除了data之外的数据,可以直接 return response.data
  } else if (response && (response.status === 500)) {
    console.log(500)
    resolve(500)
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值