mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
refactor: api module
only return promise if callback is undefined dont append baseUrl if url already starts with api correctly handle writeapi readapi response for data/error remove unused onError dont append empty ? to url for get routes
This commit is contained in:
@@ -5,55 +5,71 @@ define('api', () => {
|
|||||||
const baseUrl = config.relative_path + '/api/v3';
|
const baseUrl = config.relative_path + '/api/v3';
|
||||||
|
|
||||||
function call(options, callback) {
|
function call(options, callback) {
|
||||||
return new Promise((resolve, reject) => {
|
options.url = options.url.startsWith('/api') ?
|
||||||
|
config.relative_path + options.url :
|
||||||
|
baseUrl + options.url;
|
||||||
|
|
||||||
|
function doAjax(cb) {
|
||||||
$.ajax(Object.assign({
|
$.ajax(Object.assign({
|
||||||
headers: {
|
headers: {
|
||||||
'x-csrf-token': config.csrf_token,
|
'x-csrf-token': config.csrf_token,
|
||||||
},
|
},
|
||||||
}, options))
|
}, options))
|
||||||
.done((res) => {
|
.done((res) => {
|
||||||
resolve(res.response);
|
cb(null,
|
||||||
|
res.hasOwnProperty('status') && res.hasOwnProperty('response') ?
|
||||||
if (callback) {
|
res.response : res
|
||||||
callback(undefined, res.response);
|
);
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.fail((ev) => {
|
.fail((ev) => {
|
||||||
const error = new Error(ev.responseJSON.status.message);
|
const errMessage = ev.responseJSON.status && ev.responseJSON.status.message ?
|
||||||
reject(error);
|
ev.responseJSON.status.message :
|
||||||
|
ev.responseJSON.error;
|
||||||
|
|
||||||
if (!utils.hasLanguageKey(ev.responseJSON.status.message)) {
|
const error = new Error(errMessage || ev.statusText);
|
||||||
app.alertError(ev.responseJSON.status.message);
|
|
||||||
|
if (!utils.hasLanguageKey(error.message)) {
|
||||||
|
app.alertError(error.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (callback) {
|
cb(error);
|
||||||
callback(error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
doAjax(callback);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
doAjax(function (err, data) {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
api.get = (route, payload, onSuccess, onError) => call({
|
api.get = (route, payload, onSuccess) => call({
|
||||||
url: baseUrl + route + '?' + $.param(payload),
|
url: route + (Object.keys(payload).length ? ('?' + $.param(payload)) : ''),
|
||||||
}, onSuccess, onError);
|
}, onSuccess);
|
||||||
|
|
||||||
api.post = (route, payload, onSuccess, onError) => call({
|
api.post = (route, payload, onSuccess) => call({
|
||||||
url: baseUrl + route,
|
url: route,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: payload,
|
data: payload,
|
||||||
}, onSuccess, onError);
|
}, onSuccess);
|
||||||
|
|
||||||
api.put = (route, payload, onSuccess, onError) => call({
|
api.put = (route, payload, onSuccess) => call({
|
||||||
url: baseUrl + route,
|
url: route,
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data: payload,
|
data: payload,
|
||||||
}, onSuccess, onError);
|
}, onSuccess);
|
||||||
|
|
||||||
api.del = (route, payload, onSuccess, onError) => call({
|
api.del = (route, payload, onSuccess) => call({
|
||||||
url: baseUrl + route,
|
url: route,
|
||||||
method: 'delete',
|
method: 'delete',
|
||||||
data: payload,
|
data: payload,
|
||||||
}, onSuccess, onError);
|
}, onSuccess);
|
||||||
|
|
||||||
return api;
|
return api;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user