首页 > 其他分享 >axios 请求拦截器&响应拦截器

axios 请求拦截器&响应拦截器

时间:2022-10-12 14:44:19浏览次数:49  
标签:axios 请求 err baseURL 响应 拦截器 error

一、 拦截器介绍

一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器、响应拦截器。

  1. 请求拦截器
    在请求发送前进行必要操作处理,例如添加统一cookie、请求体加验证、设置请求头等,相当于是对每个接口里相同操作的一个封装;
  2. 响应拦截器
    同理,响应拦截器也是如此功能,只是在请求得到响应之后,对响应体的一些处理,通常是数据统一处理等,也常来判断登录失效等。

二、 Axios实例

  1. 创建axios实例
// 引入axios
import axios from 'axios'

// 创建实例
let instance = axios.create({
    baseURL: 'xxxxxxxxxx',
    timeout: 15000  // 毫秒
})
  1. baseURL设置:
let baseURL;
if(process.env.NODE_ENV === 'development') {
    baseURL = 'xxx本地环境xxx';
} else if(process.env.NODE_ENV === 'production') {
    baseURL = 'xxx生产环境xxx';
}

// 实例
let instance = axios.create({
    baseURL: baseURL,
    ...
})
  1. 修改实例配置的三种方式
// 第一种:局限性比较大
axios.defaults.timeout = 1000;
axios.defaults.baseURL = 'xxxxx';

// 第二种:实例配置
let instance = axios.create({
    baseURL: 'xxxxx',
    timeout: 1000,  // 超时,401
})
// 创建完后修改
instance.defaults.timeout = 3000

// 第三种:发起请求时修改配置、
instance.get('/xxx',{
    timeout: 5000
})

这三种修改配置方法的优先级如下:请求配置 > 实例配置 > 全局配置

三、 配置拦截器

// 请求拦截器
instance.interceptors.request.use(req=>{}, err=>{});
// 响应拦截器
instance.interceptors.reponse.use(req=>{}, err=>{});
  1. 请求拦截器
// use(两个参数)
axios.interceptors.request.use(req => {
    // 在发送请求前要做的事儿
    ...
    return req
}, err => {
    // 在请求错误时要做的事儿
    ...
    // 该返回的数据则是axios.catch(err)中接收的数据
    return Promise.reject(err)
})
  1. 响应拦截器
// use(两个参数)
axios.interceptors.reponse.use(res => {
    // 请求成功对响应数据做处理
    ...
    // 该返回的数据则是axios.then(res)中接收的数据
    return res
}, err => {
    // 在请求错误时要做的事儿
    ...
    // 该返回的数据则是axios.catch(err)中接收的数据
    return Promise.reject(err)
})
  1. 常见错误码处理(error)
    axios请求错误时,可在catch里进行错误处理。
axios.get().then().catch(err => {
    // 错误处理
})

四、 axios请求拦截器的案例

// 设置请求拦截器
axios.interceptors.request.use(
  config => {
    // console.log(config) // 该处可以将config打印出来看一下,该部分将发送给后端(server端)
    config.headers.Authorization = store.state.token
    return config // 对config处理完后返回,下一步将向后端发送请求
  },
  error => { // 当发生错误时,执行该部分代码
    // console.log(error) // 调试用
    return Promise.reject(error)
  }
)

// 定义响应拦截器 -->token值无效时,清空token,并强制跳转登录页
axios.interceptors.response.use(function (response) {
  // 响应状态码为 2xx 时触发成功的回调,形参中的 response 是“成功的结果”
  return response
}, function (error) {
  // console.log(error)
  // 响应状态码不是 2xx 时触发失败的回调,形参中的 error 是“失败的结果”
  if (error.response.status === 401) {
    // 无效的 token
    // 把 Vuex 中的 token 重置为空,并跳转到登录页面
    // 1.清空token
    store.commit('updateToken', '')
    // 2.跳转登录页
    router.push('/login')
  }
  return Promise.reject(error)
})

 

 



 

from:https://juejin.cn/post/7100470316857557006

 

 

 

 


标签:axios,请求,err,baseURL,响应,拦截器,error
From: https://www.cnblogs.com/youmingkuang/p/16784479.html

相关文章

  • 测试 HTTP 请求和响应的各种信息
    httpbin.org这个网站能测试HTTP请求和响应的各种信息,比如cookie、ip、headers和登录验证等,且支持GET、POST等多种方法,对web开发和测试很有帮助。它用Python+F......
  • nginx配置——根据路由参数来设置对应响应方式
      location/{set$is_matched0;#是否有匹配的参数#正则判断url中携带的参数是否有匹配if($query_string~".*(?:^|\?|&)token=123"){set$is_ma......
  • axios二次封装
    importaxiosfrom'axios';importnprogressfrom'nprogress';import{messageasMSG}from'antd';constbaseURL='';constservice=axios.create({bas......
  • VMware ESXi 7.0 U3 主机未响应的应急解决方法
    【说明】这是2021年写的文章,是当时vSphere7.0U3刚发布的时候出的问题。现在VMware官网上已经提供的7.0U3C及以后的版本没有这个问题。在此只是将当时的情况记录下来​。......
  • vue下载blob无法获取响应头里面的Content-Disposition来提取文件名 --导出完成代码
    exportClick(){//导出letpar={}downAxiosFile('/personnel/change/perUser/exportXls',par).then((res)=>{let{data}=res;......
  • 拦截器和跨域问题(转载)
    拦截器解决跨域问题梦梁鹿于2022-03-0316:58:06发布6161收藏7文章标签:javaweb安全版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出......
  • Java拦截器
    (1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源(3)如果是静态资源,会直接到Tomcat的项目部署目录下......
  • Servlet Response对象的响应数据和响应乱码
    ServletResponse对象一.响应数据1.getWrite():字符流//页面中输出//获取字符输出流PrintWriterwrite=response.getWriter();//......
  • axios完整配置请求数据
    <scripttype="module">importaxiosfrom'./lib/axios.min.js'//axios完整配置请求语法:axios(config)axios({url:'/admin/detail',//url会拼接在......
  • Axios 取消重复请求
    在实际开发中,我们需要对用户发起的重复请求进行拦截处理,比如用户快速点击提交按钮解决办法1、新建request.jsimportaxiosfrom'axios'//创建axios实例constse......