vue拦截器封装axois请求

vue项目请求拦截器和相应拦截器封装axois请求

参考花裤衩大佬的模板修改

import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import { getToken, removeToken } from './auth'
import router from '@/router'

// create an axios instance
const service = axios.create({
  withCredentials: true, // send cookies when cross-domain requests
  timeout: 20000 // request timeout
})

if (process.env.NODE_ENV === 'development') {
  service.defaults.baseURL = "http://localhost:8888";
} else if (process.env.NODE_ENV === 'production') {
  service.defaults.baseURL = "http://xxx.xxx.xxx.xxx:8888" //项目部署服务器ip
}

// 请求拦截器
service.interceptors.request.use(
  config => {
    //携带token
    let token = getToken();
    //若token存在,加上token
    token && (config.headers.Authorization = "Bearer" + " " + token);
    return config
  },
  error => {
    // 请求失败
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

// 相应拦截器
service.interceptors.response.use(
  /**
   * 使用自己后端定义的状态码
   * 也可以使用HTTP状态码
   */
  response => {
    
    const res = response.data
    if(res.code == undefined){
      return res
    }
    // 如果不是20000判断为失败
    if (res.code !== 20000 ) {
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
      //判断错误类型
      if (res.code === 30001 || res.code === 30002 || res.code === 30003 || res.code === 30004) {
        // 重新登陆
        MessageBox.confirm('登陆已过期,请重新登录', '登陆已过期,请重新登录。', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          removeToken()
          router.push('/login')
        })
      }
      if(res.code === 30005){
        Message.info('权限不足')
        router.push('/404')
      }
      return Promise.reject(new Error(res.message || '未知错误'))
    }else {
      return res
    }
  },
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message || '未知错误',
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

使用方法见上一篇博客

https://blog.csdn.net/baidu_35259515/article/details/119544650

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值