如何注册Axios instance 和 拦截器 然后全局使用

本文档介绍了如何注册Axios实例和拦截器以实现全局使用。首先,创建一个api.js文件作为基础URL,通过import引入到项目中。接着,通过设置vue的原型对象,覆盖$http方法,使得在整个应用中可以便捷地调用this.$http进行Axios请求。

axios官方文档
在这里分享给大家,希望能帮助到大家。
首先注册一个api.js文件

  				import axios from "axios";
                  const api = axios.create({
                    baseURL: 'https://picsum.photos/v2/list?page=2&limit=10',
                    headers: {
                      Accept: "application/json",
                      "Content-Type": "application/json"
                    }
                  });
                  api.defaults.timeout = 10000;

                  api.interceptors.request.use(
                    config => {
                      const token = localStorage.getItem("access_token");
                      if (token) {
                        api.defaults.headers.common["Authorization"] = "Bearer " + token;
                      }
                      return config;
                    },
                    error => Promise.reject(error)
                  );
                  let isRefreshing = true;
                  api.interceptors.response.use(
                    response => {
                      if (response.status === 200 || response.status === 201) {
                        return Promise.resolve(response);
                      } else {
                        return Promise.reject(response);
                      }
                    },

                    error => {
                      if (error.response.status) {
                        switch (error.response.status) {
                          case 401:
                            if (!error.request.responseURL.includes("api/token/")) {
                              if (isRefreshing) {
                                const refresh = JSON.stringify({
                                  refresh: window.localStorage.getItem("refresh_token")
                                });
                                store.dispatch("requestRefresh", refresh);
                              }
                              isRefreshing = false;

                              window.localStorage.removeItem("access_token");
                            } else {
                              throw error;
                            }

                            break;

                          case 403:
                            router.replace({
                              path: "/login",
                              query: { redirect: router.currentRoute.fullPath }
                            });
                            break;
                          case 404:
                            throw error;

                          default:
                            throw error;
                        }
                        return Promise.reject(error.response);
                      }
                    }
                  );

                  export default api;
  

api.js相当于你的基础url,你可以在全局使用这个url。前提是你需要import api.js到你想要使用axios的地方。 然后我就可以使用api.post(’/…’).then(…)

方法2 vue $http

Vue.use({
  install (Vue) {
  Vue.prototype.$http = axios.create({
    baseURL: '/'
  })
}
})

覆盖了vue原型的http方法,然后就可以全局使用this.$http进行axios的请求了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值