vue-axios拦截器

  axios还提供了拦截器的功能,他的拦截器是用拦截 请求和响应的,说简单是:请求到服务器前拦截 和 响应到客户端前拦截。

  之前我们在request.js封装了一些代码,如下:

import axios from 'axios'

export function request(config){
  //配置axios实例通用配置
  const instance1 = axios.create({
    baseURL: 'http://httpbin.org',
    timeout: 5000
  })

  return instance1(config)
}

  实际上这个封装还不完整,通常还会再这里加拦截器的,如下:

import axios from 'axios'

export function request(config){
  //1. 配置axios实例通用配置
  const instance1 = axios.create({
    baseURL: 'http://httpbin.org',
    timeout: 5000
  })
   //2. 配置拦截器
  //配置请求拦截器
  instance1.interceptors.request.use(config => { //请求拦截成功,会进入这里;注意这里的config不是上面参数config,这里的config是最终的请求配置项,包括baseURL,url,method,timeout
    /**
     *  常用拦截后的处理:
     *    1. 拦截config中一些不符合服务器要求的配置,并修改这些配置
     *    2. 一般请求成功后,数据不会马上返回,可以在这里显示一个正在加载的图标等
     *    3. 当需要某个请求必须携带token时,可以在这里进行判断
     */
    console.log('我拦截成功了')
    
    return config //要返回出去,如果没有返回出去,则代表拦截掉这个请求
  },err => { //请求失败执行这里,这里不是拦截失败,是请求失败会进入这里

  })

  //配置响应拦截器
  instance1.interceptors.response.use(result => { //响应成功进入这里;result是服务器响应的结果
    
    return result.data //这里通常是需要返回的,如果不返回代表发送请求的地方拿不到数据,还有很多时候不直接返回result的,因为最需要的其实是result的data数据
  },err => {  //响应失败会进入这里

  })

  //3. 发送请求  
  return instance1(config)
}

 

posted @ 2021-04-11 18:28  爱编程DE文兄  阅读(141)  评论(0编辑  收藏  举报