axios使用 v1

import axios from 'axios'
import QS from 'qs'
import store from '@/store'
import router from '@/router'

import constv from '@/config/constv'
// const wayValue = (process.env.NODE_ENV == 'development' || process.env.NODE_ENV == 'production') ? constv.Proxy_WAY_DEV_PROD : constv.Proxy_WAY_DEMO_API2
const wayValue = constv.Proxy_Way
var instance = axios.create({
  baseURL: `${process.env.VUE_APP_BASE_API}`, // 'http://192.168.x.x:3000/mock/130',
  headers: { 'Content-Type': 'application/json', way: wayValue },
  timeout: 60000
})
// instance.defaults.baseURL = 'http://192.168.x.x:3000/mock/130'
// instance.defaults.headers.post['Content-Type'] = 'application/json'
let flag = true
// 对外接口
export function requestJson ({ method, url, params, responseType, header }) {
  if (method === 'Get') {
    return get(url, params, responseType)
  } else if (method === 'Post') {
    return post(url, params, responseType)
  }
}

// 封装get方法
function get (url, params, responseType) {
  return new Promise((resolve, reject, responseType) => {
    instance
      .get(url, params)
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}

// 封装post方法
function post (url, params, responseType) {
  return new Promise((resolve, reject) => {
    instance
      .post(url, JSON.stringify(params), responseType, { headers: { 'Content-Type': 'application/json' } })
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}

// //请求拦截(请求发出前处理请求)
instance.interceptors.request.use(
  config => {
    const headers = config.headers
    if (headers['content-type'] === 'application/octet-stream;charset=utf-8') {
      return config.data
    }
    const token = localStorage.getItem('token')
    config.headers.common['token'] = token
    config.headers.common['way'] = wayValue
    // config.headers.common['content-type'] = 'application/json'
    return config
  },
  error => {
    return Promisee.error(error)
  }
)

// // 响应拦截器(处理响应数据)
instance.interceptors.response.use(
  response => {
    if (response.status === 200) {
      if (response.data.code === 10200) {
        if (flag) {
          alert(response.data.msg)
          flag = false
        }
        store.dispatch('Logout').then(() => {
          router.replace('/user/login')
        })
      } else if (
        response.data.code === 0 ||
        response.data.errcode === 0 ||
        response.headers['content-type'] === 'application/pdf'
      ) {
        return Promise.resolve(response)
      } else {
        alert(response.data.msg)
        return Promise.resolve(response)
      }
    } else {
      // 这个地方可以由后台编辑状态码区分不同情况,做不同的逻辑处理
      return Promise.reject(response)
    }
  },
  error => {
    if (error.response.status === 401) {
      alert('登陆过期,重新登陆')
      store.dispatch('Logout').then(() => {
        router.replace('/user/login')
      })
    } else {
      return Promise.reject(error.response)
    }
  }
)

 

posted @ 2021-10-27 18:29  hjswlqd  阅读(120)  评论(0编辑  收藏  举报