Quasar项目中boot的axios

import { boot } from 'quasar/wrappers';
import axios, { AxiosInstance } from 'axios';
import { SessionStorage } from 'quasar';

declare module 'vue' {
  interface ComponentCustomProperties {
    $axios: AxiosInstance;
    $api: AxiosInstance;
  }
}

let TOKEN = '';

const setAuthHeader = (ts: string) => {
  TOKEN = ts;
  for (const api of [TokenApi]) {
    api.defaults.headers.common['Authorization'] = `Bearer ${ts}`;
  }
};

const setToken = (token: string) => {
  if (token === '') {
    SessionStorage.remove(token);
    TOKEN = '';
  } else {
    SessionStorage.set(token, token);
    setAuthHeader(token);
  }
};

const getToken = () => {
  return SessionStorage.getItem('token') || '';
};

const JSONCT = {
  'Content-Type': 'application/json',
};

const api = axios.create({
  baseURL: 'https://api.mock.com',
  headers: { post: JSONCT },
});

const TokenApi = axios.create({
  baseURL: 'https://api.mock.com',
  headers: { post: JSONCT, get: JSONCT },
});

export default boot(({ router }) => {
  if (document.URL.includes('debug=local')) {
    TokenApi.defaults.baseURL = 'http://localhost:8000';
  }

  TokenApi.interceptors.response.use(
    (response) => {
      return response;
    },
    (error) => {
      if (error.response && error.response.status === 401) {
        setToken('');
        router.push('/login');
      }
      return Promise.reject(error);
    }
  );

  router.beforeEach((to, from, next) => {
    if (to.matched.some((rec) => rec.meta.requireAuth)) {
      if (TOKEN === '') {
        const tk = getToken() as string;
        if (tk === '') {
          next({ path: '/login' });
          return;
        }
        setAuthHeader(tk);
      }
    }
    next();
  });
});

export { api, TokenApi };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值