import { boot } from 'quasar/wrappers'; import { Connection } from '../js/db/connection'; import { userStore } from 'stores/user'; import axios from 'axios'; // 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 = axios.create({ baseURL: `//${location.hostname}:${location.port}/api/` }); const jApi = new Connection(); export default boot(({ app }) => { const user = userStore(); function addToken(config) { if (user.token) { config.headers.Authorization = user.token; } return config; } api.interceptors.request.use(addToken); jApi.use(addToken); // 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.config.globalProperties.$jApi = jApi; app.provide('jApi', jApi); app.provide('api', api); }); export { api, jApi };