關於 axios.request 的封裝


import axios from 'axios'
import Store from '../store/index.js'
import Router, { resetRouter } from '../router/index.js'
import { Message } from 'element-ui'
// 導入納米級進度條
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 開發環境
export const baseURL = 'https://test.xxx.com'
// 生產環境
// export const baseURL = 'https://xxx.com'

axios.defaults.baseURL = baseURL
axios.defaults.headers.post['Content-Type'] = 'application/json'
axios.defaults.timeout = 10000

export default function(params) {
  NProgress.start()
  const { url, method = 'get', data = {} } = params
  const Authorization = sessionStorage.getItem('token')
  const headers = {}
  if (Authorization) {
    headers.Authorization = Authorization
  }

  const query = {
    url: url,
    method: method.toLowerCase(),
    headers
  }
  if (method.toLowerCase() === 'get') {
    query.params = data
  } else {
    query.data = data
  }

  return new Promise((resolve, reject) => {
    axios
      .request(query)
      .then(res => {
        NProgress.done()
        resolve(res)
      })
      .catch(err => {
        NProgress.done()
        reject(err)
      })
  })
}

axios.interceptors.request.use(
  function(config) {
    if (config.baseURL === 'https://test.xxx.com') {
      console.log('%c測試服', 'color: red;')
    }
    const token = Store.state.token
    // 在發送請求之前做些什么
    if (token) {
      config.headers.Authorization = token
    }
    return config
  },
  function(error) {
    // 對請求錯誤做些什么
    return Promise.reject(error)
  }
)

// 添加響應攔截器
axios.interceptors.response.use(
  function(response) {
    // 對響應數據做點什么
    // 6 token 過期
    if (response.data.ret === 6) {
      sessionStorage.removeItem('token')
      resetRouter()
      Store.commit('RESER_ALLOW_ROUTES')
      Message.error('登錄過期, 請重新登錄')
      Store.dispatch('delAllViews').then(() => {
        Router.replace('/login')
      })
      // sessionStorage.removeItem('token')
      // Router.redirect('/login')
      return
    }
    return response.data
  },
  function(error) {
    // 對響應錯誤做點什么
    return Promise.reject(error)
  }
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM