axios的拦截器代码应该放到请求代码什么地方?

发布于 2022-09-05 04:15:43 字数 1039 浏览 5 评论 0

比如这里有个get请求,代码如下:


<script>
    export default {
        data() {
            return {
                dialogFormVisible: false,
            }
        },
        methods: {
            checkLogin(){
                axios.get('/check-login')
                    .then(response => {
                        console.log(response);
                        this.dialogFormVisible = true; // if is login,run this sentence
                    })
                    .catch(error => {
                        console.log(error);
                        location.href = "/login"; //if is not login ,jump to login page
                    });
            }
        }
    }
</script>

文档中拦截器的代码如下:


axios.interceptors.response.use(function (response) {
    // Do something with response data
    return response;
  }, function (error) {
    // Do something with response error
    return Promise.reject(error);
  });

问题:
这个拦截器应该放到上面请求代码的什么地方?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无风消散 2022-09-12 04:15:43

说明两点:

  • interceptor必须在请求前设置才有效。

  • 直接为axios全局对象创建interceptor,会导致全局的axios发出的请求或接收的响应都会被拦截到,所以应该使用axios.create()来创建单独的axios实例。

官方原话:

You can add interceptors to a custom instance of axios.

var instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

用vue-cli创建了个测试项目,代码如下:

Hello.vue

<script>
import axios from 'axios'

export default {
  name: 'hello',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  },
  methods: {
    getImg () {
      axios.get('https://static.segmentfault.com/v-595f50ca/global/img/logo-b.svg')
        .then((response) => {
          console.log(response)
        }).catch((error) => {
          console.log(error)
        })
    },
    addInterceptors () {
      axios.interceptors.request.use(function (config) {
        // Do something before request is sent
        console.log('开始请求')
        console.log(`请求地址: ${config.url}`)
        return config
      }, function (error) {
        // Do something with request error
        console.log('请求失败')
        return Promise.reject(error)
      })
      axios.interceptors.response.use(function (config) {
        // Do something before request is sent
        console.log('接收响应')
        return config
      }, function (error) {
        // Do something with request error
        console.log('响应出错')
        return Promise.reject(error)
      })
    }
  },
  mounted () {
    this.addInterceptors()
    this.getImg()
  }
}
</script>

控制台输出:
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文