import { boot } from 'quasar/wrappers'; import axios, { AxiosInstance } from 'axios'; import {router} from 'src/router'; declare module '@vue/runtime-core' { interface ComponentCustomProperties { $axios: AxiosInstance; $api: AxiosInstance; } } // Be careful when using SSR for cross-request state pollution // due to creating a Singleton instance here; // If any client changes this (global) instance, it might be a // good idea to move this instance creation inside of the // "export default () => {}" function below (which runs individually // for each client) const api:AxiosInstance = axios.create({ baseURL: process.env.KAB_BACKEND_URL }); const token=localStorage.getItem('token')||''; if(token!==''){ api.defaults.headers["Authorization"]='Bearer ' + token; } api.interceptors.response.use( (response)=>response, (error)=>{ const orgReq=error.config; if(error.response && error.response.status===401){ localStorage.removeItem('token'); router.replace({ path:"/login", query:{redirect:router.currentRoute.value.fullPath} }); } } ) export default boot(({ app }) => { // for use inside Vue files (Options API) through this.$axios and this.$api app.config.globalProperties.$axios = axios; // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) // so you won't necessarily have to import axios in each vue file app.config.globalProperties.$api = api; // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) // so you can easily perform requests against your app's API app.provide('$api',api); app.provide('$axios',axios); }); export { api };