api.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import VueAxios from 'vue-axios'
  4. import router from './routes.js'
  5. Vue.use(VueAxios, axios)
  6. Vue.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
  7. // let token = document.head.querySelector('meta[name="csrf-token"]');
  8. // if (token) {
  9. // Vue.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
  10. // } else {
  11. // console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
  12. // }
  13. Vue.axios.interceptors.request.use(function (request) {
  14. request.headers.common['Content-Type'] = 'application/json'
  15. return request
  16. })
  17. Vue.axios.interceptors.response.use(response => response, error => {
  18. // Return the error when we need to handle it at component level
  19. if( error.config.hasOwnProperty('returnError') && error.config.returnError === true ) {
  20. return Promise.reject(error);
  21. }
  22. // Return the error for form validation at component level
  23. if( error.response.status === 422 ) {
  24. return Promise.reject(error);
  25. }
  26. // Otherwise we push to a specific or generic error view
  27. let routeName = 'genericError'
  28. if ( error.response.status === 401 ) {
  29. routeName = 'login'
  30. }
  31. if ( error.response.status === 407 ) {
  32. router.push({ name: 'genericError', params: { err: error.response, closable: false } })
  33. throw new Vue.axios.Cancel();
  34. }
  35. // api calls are stateless so when user inactivity is detected
  36. // by the backend middleware it cannot logout the user directly
  37. // so it returns a 418 response.
  38. // We catch the 418 response and push the user to the autolock view
  39. if ( error.response.status === 418 ) routeName = 'autolock'
  40. if ( error.response.status === 404 ) routeName = '404'
  41. router.push({ name: routeName, params: { err: error.response } })
  42. throw new Vue.axios.Cancel();
  43. })