Skip to content

Instantly share code, notes, and snippets.

@mariocesar
Created September 26, 2017 04:21
Show Gist options
  • Select an option

  • Save mariocesar/e96f6cf6cb2db213173a9c08b9a9867a to your computer and use it in GitHub Desktop.

Select an option

Save mariocesar/e96f6cf6cb2db213173a9c08b9a9867a to your computer and use it in GitHub Desktop.
Axios single configured instance
import axios from "axios";
const singleton = Symbol();
const singletonEnforcer = Symbol();
function readCookie(name) {
const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
return (match ? decodeURIComponent(match[3]) : null);
}
class ApiService {
constructor(enforcer) {
if (enforcer !== singletonEnforcer) {
throw new Error('Cannot construct singleton');
}
console.log(`API Service for ${location.protocol}//${location.host}/api`);
this.session = axios.create({
baseURL: `${location.protocol}//${location.host}/api`,
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRFToken': readCookie('csrftoken'),
},
});
}
static get instance() {
// Try to get an efficient singleton
if (!this[singleton]) {
this[singleton] = new ApiService(singletonEnforcer);
}
return this[singleton];
}
get = (...params) => this.session.get(...params);
post = (...params) => this.session.post(...params);
put = (...params) => this.session.put(...params);
patch = (...params) => this.session.patch(...params);
remove = (...params) => this.session.delete(...params);
}
export default ApiService.instance;
@ashinga48
Copy link
Copy Markdown

Cheers mate

@ayusch-apps-curefit
Copy link
Copy Markdown

Can you also post this for typescript ?

@Sandeepv68
Copy link
Copy Markdown

How does this work, can some one explain, especially line 32

@rjasino
Copy link
Copy Markdown

rjasino commented Mar 9, 2022

how to use this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment