92 lines
2.8 KiB
JavaScript
92 lines
2.8 KiB
JavaScript
import ajax from '@/utils/ajax';
|
|
import router from '@/router';
|
|
import store from '@/store';
|
|
import cache from '@/utils/cache';
|
|
|
|
class RESTError extends Error {
|
|
constructor(error, message, params={}) {
|
|
let detail = error.response && error.response.data && (error.response.data.detail || error.response.data.error && error.response.data.error.detail);
|
|
let header = (message || error.message) + (detail ? ': ' + detail : '');
|
|
super(header);
|
|
|
|
this.name = this.constructor.name;
|
|
this.parent = error;
|
|
this.detail = detail;
|
|
this.response = error.response;
|
|
for (let k in params) {
|
|
this[k] = params[k];
|
|
}
|
|
|
|
//if (this.response && (this.response.status === 401 || this.response.status === 403)) {
|
|
if (this.response && (this.response.status === 401)) {
|
|
store.dispatch('deathUser');
|
|
store.dispatch('setShowAuthModal', true);
|
|
} else {
|
|
if (typeof Error.captureStackTrace === 'function') {
|
|
Error.captureStackTrace(this, this.constructor);
|
|
} else {
|
|
this.stack = (new Error(header)).stack;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class REST {
|
|
static get settings() {
|
|
throw new Error('settings must be overridden');
|
|
}
|
|
static _get(url, params={}, extraParams, use_cache=false, isBlob=false) {
|
|
return this._request('get', url, params, {}, {}, extraParams, use_cache, isBlob);
|
|
}
|
|
static _post(url, params, data) {
|
|
return this._request('post', url, params, data);
|
|
}
|
|
static _put(url, params, data) {
|
|
return this._request('put', url, params, data);
|
|
}
|
|
static _patch(url, params, data) {
|
|
return this._request('patch', url, params, data);
|
|
}
|
|
static _delete(url, params, data) {
|
|
return this._request('delete', url, params, data);
|
|
}
|
|
static _request(method, url, params={}, data={}, extraData={}, extraParams={}, use_cache=false, isBlob=false) {
|
|
let cache_key = null;
|
|
return ajax.request({
|
|
method,
|
|
url: `${this.settings}${url ? '/' : ''}${url}/`,
|
|
params,
|
|
data,
|
|
extraData,
|
|
extraParams,
|
|
headers: this._getAuthHeaders(),
|
|
responseType: this._getResponseType(isBlob),
|
|
}).then((response) => {
|
|
if (cache_key) {
|
|
cache.set(cache_key, response.data);
|
|
}
|
|
return response.data;
|
|
});
|
|
}
|
|
static _getResponseType(value){
|
|
if (value) {
|
|
return 'arraybuffer'
|
|
}
|
|
}
|
|
static _getAuthHeaders() {
|
|
if (store.state.token) {
|
|
return { 'Authorization': `Bearer ${store.state.token}` };
|
|
}
|
|
}
|
|
static _cancelToken() {
|
|
return ajax.cancelToken();
|
|
}
|
|
}
|
|
|
|
export default REST;
|
|
|
|
export {
|
|
RESTError,
|
|
REST
|
|
};
|