leancloud-storage
Version:
LeanCloud JavaScript SDK.
80 lines (63 loc) • 2.73 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _ = require('underscore');
var _require = require('promise-timeout'),
timeout = _require.timeout;
var debug = require('debug');
var debugRequest = debug('leancloud:request');
var debugRequestError = debug('leancloud:request:error');
var _require2 = require('../adapter'),
getAdapter = _require2.getAdapter;
var requestsCount = 0;
var ajax = function ajax(_ref) {
var method = _ref.method,
url = _ref.url,
query = _ref.query,
data = _ref.data,
_ref$headers = _ref.headers,
headers = _ref$headers === undefined ? {} : _ref$headers,
time = _ref.timeout,
onprogress = _ref.onprogress;
if (query) {
var queryString = (0, _keys2.default)(query).map(function (key) {
var value = query[key];
if (value === undefined) return undefined;
var v = (typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)) === 'object' ? (0, _stringify2.default)(value) : value;
return encodeURIComponent(key) + '=' + encodeURIComponent(v);
}).filter(function (qs) {
return qs;
}).join('&');
url = url + '?' + queryString;
}
var count = requestsCount++;
debugRequest('request(%d) %s %s %o %o %o', count, method, url, query, data, headers);
var request = getAdapter('request');
var promise = request(url, { method: method, headers: headers, data: data, onprogress: onprogress }).then(function (response) {
debugRequest('response(%d) %d %O %o', count, response.status, response.data || response.text, response.header);
if (response.ok === false) {
var error = new Error();
error.response = response;
throw error;
}
return response.data;
}).catch(function (error) {
if (error.response) {
if (!debug.enabled('leancloud:request')) {
debugRequestError('request(%d) %s %s %o %o %o', count, method, url, query, data, headers);
}
debugRequestError('response(%d) %d %O %o', count, error.response.status, error.response.data || error.response.text, error.response.header);
error.statusCode = error.response.status;
error.responseText = error.response.text;
error.response = error.response.data;
}
throw error;
});
return time ? timeout(promise, time) : promise;
};
module.exports = ajax;