Vue的axios拦截器

Vue的axios拦截器

为什么要使用拦截器?

​ 在页面发送http请求,很多情况我们要对请求和其响应进行特定的处理,如:判断token,设置请求头。如果请求数非常多,单独对每一个请求进行处理会变得非常麻烦,程序的优雅性也会大打折扣。

所以axios为开发者提供了这样一个API:拦截器。

拦截器分类?

拦截器分为 请求(request)拦截器和 响应(response)拦截器

代码实现

mounted(){
   let that = this;
   // 组件被挂载  可以操作数据
   // 1、请求拦截
   axios.interceptors.request.use(function(config){
       // 请求之前可以做一些处理、操作
       // eg:请求的loading动画
       // 为所有的请求添加公用部分 =>  比如接口前面的配置都是一样的  在这里就可以把相同的抽离出来  统一添加
       console.log('请求即将开始');
       return config;
   },function(err){
       //请求错误之前可以进行处理
       return Promise.reject(err)
   });
   // 2、拦截响应
   axios.interceptors.response.use(function(response){
       //对返回的数据进行操作
       console.log('即将返回我们想要的数据');
       console.log(response);
       // if(response.data.code == 240){
       //     that.msg = '联系coder处理'
       // }
       if(response.data.code == 240){
           response  = '联系coder处理'
       }
       
       return response
   },function(err){
       return Promise.reject(err)
   })
}

Vue拦截案例

请求一个接口,post请求需要带key值传参,如果没有key,在响应拦截中拦截错误进行信息返回
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>post</title>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <button @click="post">Post请求</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.26.1/axios.min.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return{
                    msg:'POST请求',
                    postUrl:"http://api.tianapi.com/networkhot/index",
                }
            },
            mounted(){
                let that = this;
                // 组件被挂载  可以操作数据
                // 1、请求拦截
                axios.interceptors.request.use(function(config){
                    // 请求之前可以做一些处理、操作
                    // eg:请求的loading动画
                    // 为所有的请求添加公用部分 =>  比如接口前面的配置都是一样的  在这里就可以把相同的抽离出来  统一添加
                    console.log('请求即将开始');
                    return config;
                },function(err){
                    //请求错误之前可以进行处理
                    return Promise.reject(err)
                });
                // 2、拦截响应
                axios.interceptors.response.use(function(response){
                    //对返回的数据进行操作
                    console.log('即将返回我们想要的数据');
                    console.log(response);
                    // if(response.data.code == 240){
                    //     that.msg = '联系coder处理'
                    // }
                    if(response.data.code == 240){
                        response  = '联系coder处理'
                    } 
                    return response
                },function(err){
                    return Promise.reject(err)
                })
            },
            methods:{
                post(){
                   axios.post(this.postUrl+'?key=04c33fe9934dc4ce67afc0d7a41a80d7',{
                       headers:{
                           'Content-Type':'application/x-www-form-urlencoded'
                       }
                   }).then(
                       //promise 语法
                       // .then  代表成功获取数据之后的操作
                   res=>{//res  == response 代表返回值
                    this.msg = res
                   }).catch(err=>{
                    console.log(err);
                   })
                }               
            }
        })
    </script>
</body>
</html>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中使用Axios拦截可以在发送请求或响应返回前对其进行一些处理。拦截可以用来添加公共headers、设置loading状态、处理错误等。 首先,你需要安装并导入Axios库。然后在Vue组件中定义拦截。以下是一个简单的示例: ```javascript // main.js import axios from 'axios'; axios.interceptors.request.use( config => { // 在请求发送前做一些处理,比如添加headers config.headers['Authorization'] = 'Bearer token'; return config; }, error => { // 处理请求错误 return Promise.reject(error); } ); axios.interceptors.response.use( response => { // 在响应返回前做一些处理,比如解析数据 return response; }, error => { // 处理响应错误 return Promise.reject(error); } ); // Vue组件中使用Axios export default { data() { return { responseData: null, loading: false }; }, methods: { fetchData() { this.loading = true; axios.get('/api/data') .then(response => { this.responseData = response.data; this.loading = false; }) .catch(error => { console.error(error); this.loading = false; }); } } }; ``` 在上面的示例中,我们定义了两个拦截:一个用于请求发送前处理,一个用于响应返回前处理。在请求拦截中,我们可以添加headers等信息;在响应拦截中,我们可以对响应数据进行处理。 同时,在Vue组件中使用Axios发送请求时,我们可以通过`then`和`catch`方法来处理响应和错误。在这个示例中,我们设置了一个`loading`状态来展示加载状态,当请求成功后,将返回的数据保存在`responseData`中。 这只是一个简单的示例,你可以根据自己的需求来进行更复杂的处理。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值