2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-20 20:00:40 +03:00

Add support third-party library to serialize url params

This commit is contained in:
David Fournier
2015-10-03 11:24:49 +02:00
parent 4f732e8caa
commit 14ede9e18e
7 changed files with 52 additions and 27 deletions
+32 -24
View File
@@ -20,39 +20,47 @@ function encode(val) {
* @param {object} [params] The params to be appended
* @returns {string} The formatted url
*/
module.exports = function buildUrl(url, params) {
module.exports = function buildUrl(url, params, paramsSerializer) {
if (!params) {
return url;
}
var parts = [];
var serializedParams;
if (paramsSerializer) {
serializedParams = paramsSerializer(params);
}
else {
var parts = [];
utils.forEach(params, function (val, key) {
if (val === null || typeof val === 'undefined') {
return;
}
if (utils.isArray(val)) {
key = key + '[]';
}
if (!utils.isArray(val)) {
val = [val];
}
utils.forEach(val, function (v) {
if (utils.isDate(v)) {
v = v.toISOString();
utils.forEach(params, function (val, key) {
if (val === null || typeof val === 'undefined') {
return;
}
else if (utils.isObject(v)) {
v = JSON.stringify(v);
if (utils.isArray(val)) {
key = key + '[]';
}
parts.push(encode(key) + '=' + encode(v));
if (!utils.isArray(val)) {
val = [val];
}
utils.forEach(val, function (v) {
if (utils.isDate(v)) {
v = v.toISOString();
}
else if (utils.isObject(v)) {
v = JSON.stringify(v);
}
parts.push(encode(key) + '=' + encode(v));
});
});
});
if (parts.length > 0) {
url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');
serializedParams = parts.join('&');
}
if (serializedParams) {
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
}
return url;