export function paramsToObject(mParams: URLSearchParams) { const params = new URLSearchParams(mParams.toString()); const paramsObj = {}; for (const [key, value] of params) { if (Array.isArray(paramsObj[key])) { paramsObj[key] = [...paramsObj[key], value]; } else { paramsObj[key] = [value]; } } return paramsObj; }该段代码实现了什么功能
时间: 2024-03-29 11:41:25 浏览: 271
该段代码实现了将 URLSearchParams 对象转换为 JavaScript 对象的功能。具体来说,它将 URLSearchParams 对象中的参数键值对转换为 JavaScript 对象中的属性和值,并处理了参数值为数组的情况。最终返回的是一个 JavaScript 对象,其中每个属性对应一个参数键,每个属性的值都是一个数组,包含了该参数键对应的所有参数值。
相关问题
vue2:路由跳转,如何将所有传参整体加密
在 Vue2 中,如果想要对路由传参进行整体加密,你可以创建一个自定义的全局守卫 (guard) 或者在每次路由跳转前处理参数。这里提供一种简单的示例,我们将使用 Babel 密码库(@nuxt/babel-plugin-syntax-decorators 和 @nuxtjs/axios 的 interceptors)来实现参数加密:
1. 首先,安装必要的依赖:
```
npm install --save-dev @nuxt/babel-plugin-syntax-decorators axios
```
2. 在 `build` 目录下创建一个 `.babelrc` 文件,添加 Babel 插件:
```json
{
"plugins": [
["@nuxt/babel-plugin-syntax-decorators", { "useBuiltIns": true }],
"@nuxtjs/axios"
]
}
```
3. 在 `plugins` 目录下创建一个 `encryptParams.js` 文件,编写加密函数:
```javascript
import crypto from 'crypto-js'
export default async function encryptParams(context, next) {
const encryptedParams = context.params
Object.keys(encryptedParams).forEach((key) => {
if (typeof encryptedParams[key] === 'string') {
encryptedParams[key] = crypto.AES.encrypt(
encryptedParams[key],
process.env.SECRET_KEY // 替换为你项目中的密钥
).toString(crypto.enc.Utf8);
}
});
await next();
}
```
4. 在 `nuxt.config.js` 中启用这个插件并注册全局守卫:
```javascript
export default {
build: {
plugins: ['encryptParams']
},
router: {
middleware: ['encryptParams'] // 将加密中间件应用到所有路由上
}
}
```
5. 现在,当你通过路由传递参数时,它们会被自动加密。例如,原来的路由配置可能是:
```javascript
// router/index.js
{
path: '/user/:id',
component: () => import('@/views/User.vue'),
meta: { requiresAuth: true }
}
```
加密后的路径会看起来像:
```text
/user/:id?enc=[加密后的ID]
```
vue2:统一修改页面跳转路由上的参数的整体加密解密
在Vue2中,如果你想要统一管理页面跳转时路由参数的加密和解密,可以考虑将操作封装到一个全局的函数或者服务(如Vuex store 或者自定义工具函数)。下面是一个基本步骤:
1. 创建一个全局的工具函数,例如`encryptAndEncodeParams`用于加密并编码参数,`decodeAndDecryptParams`负责解码并解密参数。你可以选择使用一些加密库如jsencrypt,或者简单的基于某种算法(比如Base64、URL编码等)进行操作。
```javascript
import JSEncrypt from 'jsencrypt';
const jse = new JSEncrypt();
// 初始化加密工具,替换为你实际使用的加密方式
function encryptAndEncodeParams(params) {
// 对参数进行加密,然后编码
const encryptedParams = jse.encrypt(JSON.stringify(params)).toString();
return encryptedParams;
}
function decodeAndDecryptParams(encryptedParams) {
// 解码并解密返回原始参数
try {
const decodedParams = JSON.parse(jse.decrypt(encryptedParams).原信息);
return decodedParams;
} catch (e) {
console.error('解密失败:', e);
return {};
}
}
```
2. 当需要跳转路由并携带加密参数时,先调用`encryptAndEncodeParams`处理参数,然后设置到路由链接:
```javascript
this.$router.push({
name: 'yourRouteName',
query: { params: encryptAndEncodeParams(yourData) },
});
```
3. 在接收路由参数的地方,先解码再解密:
```javascript
export default {
computed: {
receivedParams() {
const rawParams = this.$route.query.params;
return decodeAndDecryptParams(rawParams);
},
},
};
```
阅读全文
相关推荐
















