axios拦截器

Axios封装与拦截器实战
本文详细介绍了如何在Vue项目中封装Axios库,并利用请求和响应拦截器实现自动登录状态检查与错误处理,确保前后端交互的高效与安全。

在src目录下的http目录创建一个index.js文件

/*
 * 文件路径 src/http/index
 */

import axios from "axios";  //引入axios

创建一个axios实例

let http = axios.create({
  timeout: 300000
})

请求拦截器

请求拦截器会在你发送请求之前运行,一般根据是否存在token在请求头上加上token,将token传给后端,后端根据token判断登录是否过期

// request 拦截器
http.interceptors.request.use(
  config => {
    const token = sessionStorage.getItem('token')
    if (token ) { // 判断是否存在token,如果存在的话,则每个请求头加上token
      config.headers.authorization = token 
    }
    return config
  },
  error => {
    return Promise.reject(error)
  })

响应拦截器

很对网站过一段时间之后就会重新登录,如果在每个接口都判断登录是否失效重复代码太多,而且麻烦,用响应拦截器可以做统一处理,方便很多

// response 拦截器
http.interceptors.response.use(
  response => {
    //判断登录是否失效,做统一处理 
    if (response.data.code) {
      switch (response.data.code) {
        case 403:
          store.state.isLogin = false
          //不会向 history 添加新记录,而是替换掉当前的 history 记录
          router.replace({
            path: 'login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          })
      }
    }
    return response
  },
  error => {
    return Promise.reject(error.response.msg) // 返回接口返回的错误信息
  })

最后把实例导出就行了

export default http

在需要的页面导入就可以使用了

/* 文件路径 src/http/user*/
import http from '@/http/index'

/* 获取用户信息 */
export function userInfor (data) {
  return http.post('/v1/user', data)
}

在组件中使用接口返回数据

import { userInfor} from '@/http/user'

export default {
  data() {
    return {}
  },
  created() {
    let params = {id:666}
    userInfor(params).then(
        res => {
          console.log('接口数据', res.data.data)
        },
        error=> {
          console.log('error', error)
        }
      )
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值