Vue中Axios的二次封装和API接口管理规范


在SRC目录下新建request文件,新建index.js管理请求

根据环境变量区分接口的默认地址

import axios from 'axios'
import qs from 'qs'

/*
 *#根据环境变量区分接口的默认地址
 */
switch (process.env.NoDE_ENV) {
  case 'production':
    axios.defaults.baseURL = 'http://xxx'
    break
  case 'test':
    axios.defaults.baseURL = 'http://xxx'
    break
  default:
    axios.defaults.baseURL = 'http://xxx'
}

设置超时时间和跨域是否允许携带凭证

/*
 *设置超时时间和跨域是否允许携带凭证
 */
axios.defaults.timeout = 10000
axios.defaults.withCredentials = true

设置请求传递数据的格式

/*
 *设置请求传递数据的格式
 *(看服务器要求什么格式)
 */
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.transformRequest = data => qs.stringify(data)

设置请求拦截器

/*
 *设置请求拦截器
 *TOKEN校验(JWT):接收服务器返回的token,存储到vuex/本地
 *每一次想服务器发请求,我们应该吧token带上
 */
axios.interceptors.request.use(config => {
  // ^携带上token
  let token = localStorage.getItem('token')
  token && (config.headers.Authorization = token)
  return config
}, error => {
  return Promise.reject(error)
})

响应拦截器

/*
 *响应拦截器
 *服务器返回信息 - [拦截的统一处理] - 客户端JS获取到信息
 */
axios.interceptors.response.use(response => {
  return response.data
}, error => {
  let { response } = error
  if (response) {
    //* =>服务器返回结果了
    switch(response.status) {
      // ^自定义响应成功的HTTP状态码
      case 401: // ^权限问题
        break
      case 403: // ^服务器拒绝执行(token过期)
        break
      case 404: // ^找不到页面
        break  
    }
  } else {
    //* =>服务器结果没有返回
      if (!window.navigator.onLine) {
        // *断网处理:跳到断网页面
        return
      }
      return Promise.reject(error)
  }
})

export default axios
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值