Skip to content

Commit 52da287

Browse files
committed
upd:obj2str方法
1 parent c10c7de commit 52da287

File tree

3 files changed

+93
-129
lines changed

3 files changed

+93
-129
lines changed

demo-album/lib/cos-wx-sdk-v5.js

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8904,53 +8904,41 @@ module.exports.init = function (COS, task) {
89048904
/* 18 */
89058905
/***/ (function(module, exports) {
89068906

8907-
var obj2str = function (obj) {
8908-
var i, key, val;
8909-
var list = [];
8910-
var keyList = Object.keys(obj);
8911-
for (i = 0; i < keyList.length; i++) {
8912-
key = keyList[i];
8913-
val = obj[key] || '';
8914-
list.push(key + '=' + encodeURIComponent(val));
8915-
}
8916-
return list.join('&');
8917-
};
8907+
function camSafeUrlEncode(str) {
8908+
return encodeURIComponent(str)
8909+
.replace(/!/g, '%21')
8910+
.replace(/'/g, '%27')
8911+
.replace(/\(/g, '%28')
8912+
.replace(/\)/g, '%29')
8913+
.replace(/\*/g, '%2A');
8914+
}
89188915

8919-
var stringifyPrimitive = function(v) {
8920-
switch (typeof v) {
8921-
case 'string':
8922-
return v;
8923-
case 'boolean':
8924-
return v ? 'true' : 'false';
8925-
case 'number':
8926-
return isFinite(v) ? v : '';
8927-
default:
8928-
return '';
8916+
function getObjectKeys(obj, forKey) {
8917+
var list = [];
8918+
for (var key in obj) {
8919+
if (obj.hasOwnProperty(key)) {
8920+
list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key);
8921+
}
89298922
}
8923+
return list.sort(function (a, b) {
8924+
a = a.toLowerCase();
8925+
b = b.toLowerCase();
8926+
return a === b ? 0 : (a > b ? 1 : -1);
8927+
});
89308928
};
89318929

8932-
var queryStringify = function(obj, sep, eq, name) {
8933-
sep = sep || '&';
8934-
eq = eq || '=';
8935-
if (obj === null) {
8936-
obj = undefined;
8937-
}
8938-
if (typeof obj === 'object') {
8939-
return Object.keys(obj).map(function(k) {
8940-
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
8941-
if (Array.isArray(obj[k])) {
8942-
return obj[k].map(function(v) {
8943-
return ks + encodeURIComponent(stringifyPrimitive(v));
8944-
}).join(sep);
8945-
} else {
8946-
return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
8947-
}
8948-
}).filter(Boolean).join(sep);
8949-
8930+
var obj2str = function (obj) {
8931+
var i, key, val;
8932+
var list = [];
8933+
var keyList = getObjectKeys(obj);
8934+
for (i = 0; i < keyList.length; i++) {
8935+
key = keyList[i];
8936+
val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]);
8937+
key = camSafeUrlEncode(key).toLowerCase();
8938+
val = camSafeUrlEncode(val) || '';
8939+
list.push(key + '=' + val)
89508940
}
8951-
if (!name) return '';
8952-
return encodeURIComponent(stringifyPrimitive(name)) + eq +
8953-
encodeURIComponent(stringifyPrimitive(obj));
8941+
return list.join('&');
89548942
};
89558943

89568944
var request = function (params, callback) {
@@ -9028,7 +9016,7 @@ var request = function (params, callback) {
90289016
});
90299017
});
90309018
} else {
9031-
var qsStr = params.qs && queryStringify(params.qs) || '';
9019+
var qsStr = params.qs && obj2str(params.qs) || '';
90329020
if (qsStr) {
90339021
url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr;
90349022
}

demo/lib/cos-wx-sdk-v5.js

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8904,53 +8904,41 @@ module.exports.init = function (COS, task) {
89048904
/* 18 */
89058905
/***/ (function(module, exports) {
89068906

8907-
var obj2str = function (obj) {
8908-
var i, key, val;
8909-
var list = [];
8910-
var keyList = Object.keys(obj);
8911-
for (i = 0; i < keyList.length; i++) {
8912-
key = keyList[i];
8913-
val = obj[key] || '';
8914-
list.push(key + '=' + encodeURIComponent(val));
8915-
}
8916-
return list.join('&');
8917-
};
8907+
function camSafeUrlEncode(str) {
8908+
return encodeURIComponent(str)
8909+
.replace(/!/g, '%21')
8910+
.replace(/'/g, '%27')
8911+
.replace(/\(/g, '%28')
8912+
.replace(/\)/g, '%29')
8913+
.replace(/\*/g, '%2A');
8914+
}
89188915

8919-
var stringifyPrimitive = function(v) {
8920-
switch (typeof v) {
8921-
case 'string':
8922-
return v;
8923-
case 'boolean':
8924-
return v ? 'true' : 'false';
8925-
case 'number':
8926-
return isFinite(v) ? v : '';
8927-
default:
8928-
return '';
8916+
function getObjectKeys(obj, forKey) {
8917+
var list = [];
8918+
for (var key in obj) {
8919+
if (obj.hasOwnProperty(key)) {
8920+
list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key);
8921+
}
89298922
}
8923+
return list.sort(function (a, b) {
8924+
a = a.toLowerCase();
8925+
b = b.toLowerCase();
8926+
return a === b ? 0 : (a > b ? 1 : -1);
8927+
});
89308928
};
89318929

8932-
var queryStringify = function(obj, sep, eq, name) {
8933-
sep = sep || '&';
8934-
eq = eq || '=';
8935-
if (obj === null) {
8936-
obj = undefined;
8937-
}
8938-
if (typeof obj === 'object') {
8939-
return Object.keys(obj).map(function(k) {
8940-
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
8941-
if (Array.isArray(obj[k])) {
8942-
return obj[k].map(function(v) {
8943-
return ks + encodeURIComponent(stringifyPrimitive(v));
8944-
}).join(sep);
8945-
} else {
8946-
return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
8947-
}
8948-
}).filter(Boolean).join(sep);
8949-
8930+
var obj2str = function (obj) {
8931+
var i, key, val;
8932+
var list = [];
8933+
var keyList = getObjectKeys(obj);
8934+
for (i = 0; i < keyList.length; i++) {
8935+
key = keyList[i];
8936+
val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]);
8937+
key = camSafeUrlEncode(key).toLowerCase();
8938+
val = camSafeUrlEncode(val) || '';
8939+
list.push(key + '=' + val)
89508940
}
8951-
if (!name) return '';
8952-
return encodeURIComponent(stringifyPrimitive(name)) + eq +
8953-
encodeURIComponent(stringifyPrimitive(obj));
8941+
return list.join('&');
89548942
};
89558943

89568944
var request = function (params, callback) {
@@ -9028,7 +9016,7 @@ var request = function (params, callback) {
90289016
});
90299017
});
90309018
} else {
9031-
var qsStr = params.qs && queryStringify(params.qs) || '';
9019+
var qsStr = params.qs && obj2str(params.qs) || '';
90329020
if (qsStr) {
90339021
url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr;
90349022
}

lib/request.js

Lines changed: 31 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,38 @@
1-
var obj2str = function (obj) {
2-
var i, key, val;
3-
var list = [];
4-
var keyList = Object.keys(obj);
5-
for (i = 0; i < keyList.length; i++) {
6-
key = keyList[i];
7-
val = obj[key] || '';
8-
list.push(key + '=' + encodeURIComponent(val));
9-
}
10-
return list.join('&');
11-
};
1+
function camSafeUrlEncode(str) {
2+
return encodeURIComponent(str)
3+
.replace(/!/g, '%21')
4+
.replace(/'/g, '%27')
5+
.replace(/\(/g, '%28')
6+
.replace(/\)/g, '%29')
7+
.replace(/\*/g, '%2A');
8+
}
129

13-
var stringifyPrimitive = function(v) {
14-
switch (typeof v) {
15-
case 'string':
16-
return v;
17-
case 'boolean':
18-
return v ? 'true' : 'false';
19-
case 'number':
20-
return isFinite(v) ? v : '';
21-
default:
22-
return '';
10+
function getObjectKeys(obj, forKey) {
11+
var list = [];
12+
for (var key in obj) {
13+
if (obj.hasOwnProperty(key)) {
14+
list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key);
15+
}
2316
}
17+
return list.sort(function (a, b) {
18+
a = a.toLowerCase();
19+
b = b.toLowerCase();
20+
return a === b ? 0 : (a > b ? 1 : -1);
21+
});
2422
};
2523

26-
var queryStringify = function(obj, sep, eq, name) {
27-
sep = sep || '&';
28-
eq = eq || '=';
29-
if (obj === null) {
30-
obj = undefined;
31-
}
32-
if (typeof obj === 'object') {
33-
return Object.keys(obj).map(function(k) {
34-
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
35-
if (Array.isArray(obj[k])) {
36-
return obj[k].map(function(v) {
37-
return ks + encodeURIComponent(stringifyPrimitive(v));
38-
}).join(sep);
39-
} else {
40-
return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
41-
}
42-
}).filter(Boolean).join(sep);
43-
24+
var obj2str = function (obj) {
25+
var i, key, val;
26+
var list = [];
27+
var keyList = getObjectKeys(obj);
28+
for (i = 0; i < keyList.length; i++) {
29+
key = keyList[i];
30+
val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]);
31+
key = camSafeUrlEncode(key).toLowerCase();
32+
val = camSafeUrlEncode(val) || '';
33+
list.push(key + '=' + val)
4434
}
45-
if (!name) return '';
46-
return encodeURIComponent(stringifyPrimitive(name)) + eq +
47-
encodeURIComponent(stringifyPrimitive(obj));
35+
return list.join('&');
4836
};
4937

5038
var request = function (params, callback) {
@@ -122,7 +110,7 @@ var request = function (params, callback) {
122110
});
123111
});
124112
} else {
125-
var qsStr = params.qs && queryStringify(params.qs) || '';
113+
var qsStr = params.qs && obj2str(params.qs) || '';
126114
if (qsStr) {
127115
url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr;
128116
}

0 commit comments

Comments
 (0)