对于常用的axios的封装,你知道的全面吗?

74 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

我问你答

首先第一个问题:封装的文件在哪?

不会吧不会吧,不会真的有人不知道这么简单的问题吧

是在utils/request.js 中 附赠axios的拦截器官网

第二个:都知道拦截器有两(请求拦截器和响应拦截器),但它们各自作用是啥?

请求拦截器:顾名思义就是在发送请求的时候进行拦截,主要就是完成token的统一注入

// axios的请求拦截器
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['X-Token'] = getToken()
    }
    return config
  },
  error => {
    console.log(error)
    return Promise.reject(error)
  }
)

响应拦截器:就是在响应时,数据还没有返回回去时进行拦截,主要处理返回的数据异常数据结构 问题

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    // if the custom code is not 20000, it is judged as an error.
    if (res.code !== 20000) {
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        // to re-login
        MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
          confirmButtonText: 'Re-Login',
          cancelButtonText: 'Cancel',
          type: 'warning'
        }).then(() => {
          store.dispatch('user/resetToken').then(() => {
            location.reload()
          })
        })
      }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

其实应该先在utils/request.js文件中,先搭建一个简单的模块,其实不知道的内容,看前面官网

// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
const service = axios.create() // 创建一个axios的实例
// service.interceptors.request.use() // 请求拦截器
// service.interceptors.response.use() // 响应拦截器
export default service // 导出axios实例

封装axios的内容有几个

有三个

  • axios.create(创建axios实例)
  • 请求拦截器
  • 响应拦截器

不会吧不会吧,这么简单/基础的知识点,不会还有人不知道吧

过程图 在这里插入图片描述