Axios二次封装记录

121 阅读1分钟

前言

在vue项目中,引入axios的http库,进行二次封装,本文结合自己参与过的项目记录一下二次封装的代码。

Axios二次封装

import axios from 'axios' // 安装axios后引入
let url = "xxx" // 请求的服务器url

//创建axios实例
const service = axios.create({
  baseURL: url, // 主路径
  withCredentials: true, // 允许跨域携带cookie
  timeout: 5000 // 时延
})

// 设置 post、put 默认 Content-Type
service.defaults.headers.post['Content-Type'] = 'application/json'
service.defaults.headers.put['Content-Type'] = 'application/json'

// request拦截
service.interceptors.request.use(config => {
  config.headers['X-Token'] = getToken('xxx') 
  // getToken函数不赘述,用于获取token
  return config
},
error => {
  console.log(error) // 打印错误
  return Promise.reject(error)
})

// reponse 拦截
service.interceptors.response.use(response => {
  const res = response.data
  if (res.code !== 200) {
    Toast.fail(res.detail || res.msg)
    // 50008:非法令牌;50012:其他客户登录;50014:令牌过期;
    if (res.code === 5008 || res.code === 50012 || res.code === 50014) {
      Toast.fail('您已登出,请重新登录')
      // todo
    }
    return Promise.reject(response)
  } else {
    if (response.detail) {
      // todo
    }
    return res
  }
},
(error) => {
  return Promise.reject(error)
})

export default service