axios封装

import axios from 'axios'

import qs from 'qs'

// 引入配置文件

import baseConfig from '@/config/config.base'

// 创建一个请求对象

let axiosX = axios.create({

  baseURL: baseConfig.DEV_API_URL

})

// request 拦截,带入登录凭证

axiosX.interceptors.request.use(

  config => {

    //登录成功时获取token

    if (sessionStorage.getItem('token') && sessionStorage.getItem('token') !== '') {

      config.headers['token'] = sessionStorage.getItem('token') // 请求头带上token

    }

    return config

  },

  err => {

    return Promise.reject(err)

  }

)

// response 拦截

axiosX.interceptors.response.use(

  response => {

    const code = response.data.code

    // 如果未返回 body 体

    if (!response.data) {

      alert('系统繁忙!请稍后再试!')

    }

    // 如果登录信息失效

    if (code === '0000002' || code === '0000001' || code === '1000') {

      store.dispatch('auth/logout')

    }

// 导出文件的时候

 if (response.data instanceof Blob) {

      return response

    }

    // 错误处理

    if (+code !== 0) {

      SG_Message.error()

    }

    // 成功则直接返回数据

    return response.data

  },

  error => {

    // 如果服务器返回500错误

    if (error.response && error.response.status === 500) {

      alert()

    }

    return Promise.reject(error)

  }

)

/**

 * @param {string}  method   请求方法

 * @param {string}  url      请求地址

 * @param {Object}  params    请求参数

 * @param {Boolean} loading  loading 状态

 * @param {Boolean} stringify 是否格式化参数

 */

function XHR(url, { method = 'get', params = {}, loading = false, stringify = true, options = {} }) {

  // 格式化参数

  let fromData = method === 'get' ? { params, ...options } : params

  // 如果开启格式参数,且请求为 post

  if (method === 'post' && stringify) {

    fromData = qs.stringify(fromData)

  }

  // 启用loading

  let loadingName

// 全局加载组件

if (loading) loadingName = loading()

  // 返回结果

  return new Promise((resolve, reject) => {

    axiosX[method](url, fromData, options).then(res => {

    // 销毁加载组件

    if (loadingName) destroy(loadingName)

      resolve(res)

    }).catch(error => {

      if (loadingName) destroy(loadingName)

      reject(error)

    })

  })

}

/**

 * GET 请求

 * @param {String} url 地址

 * @param {Object} params 参数

 * @param {Boolean} loading 加载状态,默认开启

 * @param {Object} options 请求头设置

 */

export function axiosGet(url, params, loading = false, options) {

  return XHR(url, { method: 'get', params, loading, options })

}

/**

 * POST 请求

 * @param {String} url 地址

 * @param {Object} params 参数

 * @param {Boolean} loading 加载状态,默认开启

 * @param {Boolean} stringify 是否格式化参数

 * @param {Object} options 请求头设置

 */

export function axiosPost(url, params, loading = false, stringify = false, options) {

  return XHR(url, { method: 'post', params, loading, options, stringify })

}

export default function (Vue) {

  // 注入未封装的原始请求

  Vue.prototype.$axios = axiosX

  // 注入封装好的请求

  Vue.prototype.$http = {

    get: axiosGet,

    post: axiosPost

  }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容