From 8865514c81a6bc38a6d7d06827056cc79436bdf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Mon, 15 Jun 2020 17:13:53 +0800 Subject: [PATCH] fix[utils]: param2Obj bug when url params includes == --- mock/utils.js | 24 +++++++++++++----------- src/utils/index.js | 22 ++++++++++++---------- tests/unit/utils/param2Obj.spec.js | 21 +++++++++++++++++++++ 3 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 tests/unit/utils/param2Obj.spec.js diff --git a/mock/utils.js b/mock/utils.js index 9eb4c78..41eb494 100644 --- a/mock/utils.js +++ b/mock/utils.js @@ -2,20 +2,22 @@ * @param {string} url * @returns {Object} */ -function param2Obj(url) { - const search = url.split('?')[1] +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') if (!search) { return {} } - return JSON.parse( - '{"' + - decodeURIComponent(search) - .replace(/"/g, '\\"') - .replace(/&/g, '","') - .replace(/=/g, '":"') - .replace(/\+/g, ' ') + - '"}' - ) + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj } module.exports = { diff --git a/src/utils/index.js b/src/utils/index.js index 37ae434..4830c04 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -99,17 +99,19 @@ export function formatTime(time, option) { * @returns {Object} */ export function param2Obj(url) { - const search = url.split('?')[1] + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') if (!search) { return {} } - return JSON.parse( - '{"' + - decodeURIComponent(search) - .replace(/"/g, '\\"') - .replace(/&/g, '","') - .replace(/=/g, '":"') - .replace(/\+/g, ' ') + - '"}' - ) + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj } diff --git a/tests/unit/utils/param2Obj.spec.js b/tests/unit/utils/param2Obj.spec.js new file mode 100644 index 0000000..f54c80c --- /dev/null +++ b/tests/unit/utils/param2Obj.spec.js @@ -0,0 +1,21 @@ +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +}