JavaScript可通过高阶函数封装加解密逻辑,自动在请求前加密参数、响应后解密数据;1. 实现AES加解密工具函数;2. 创建withRequestEncryption增强请求;3. 创建withResponseDecryption增强响应;4. 可链式组合或与Axios拦截器集成。

JavaScript 中可以通过高阶函数封装通用的加解密逻辑,将加密/解密行为“注入”到请求发起前或响应解析后,从而避免在每个接口调用处重复写加解密代码。核心思路是:用一个函数接收原始请求函数(如 fetch 或 axios 请求方法),返回一个增强后的新函数,该函数自动处理参数加密和响应解密。
1. 定义加解密工具函数
先实现基础的加解密逻辑(以 AES 为例,实际项目中建议使用成熟的库如 crypto-js 或 Web Crypto API):
- 加密:对请求参数对象序列化后加密,生成密文字符串(如 Base64)
-
解密:对响应数据中的加密字段(如
data字段)进行解密,并还原为原始结构 - 密钥、IV、算法等应统一管理,避免硬编码;可从配置或登录态中动态获取
2. 创建请求增强高阶函数(加密侧)
以下是一个对 POST 请求参数自动加密的高阶函数示例:
function withRequestEncryption(requestFn, encryptFn) {
return async function(url, options = {}) {
const { method = 'GET', body, ...rest } = options;
// 仅对 POST/PUT 等带 body 的请求加密
if (method.toUpperCase() !== 'GET' && body && typeof body === 'object') {
const encryptedBody = encryptFn(body); // 加密原始参数对象
return requestFn(url, {
...rest,
method,
headers: {
'Content-Type': 'application/json',
...rest.headers,
},
body: JSON.stringify({ encrypted: encryptedBody }), // 发送加密后数据
});
}
return requestFn(url, options);
};
}
使用方式:
立即学习“Java免费学习笔记(深入)”;
const safeFetch = withRequestEncryption(fetch, myAesEncrypt);
safeFetch('/api/login', {
method: 'POST',
body: { username: 'admin', password: '123' }
}); // 自动加密 body 并发送
3. 创建响应增强高阶函数(解密侧)
对响应结果自动解密关键字段:
function withResponseDecryption(requestFn, decryptFn) {
return async function(...args) {
const response = await requestFn(...args);
const json = await response.json();
if (json.code === 0 && json.data && typeof json.data === 'string') {
try {
const decrypted = decryptFn(json.data); // 解密 data 字段
return { ...json, data: JSON.parse(decrypted) };
} catch (e) {
throw new Error('响应解密失败');
}
}
return json;
};
}
可链式组合:
const securedFetch = withResponseDecryption( withRequestEncryption(fetch, myAesEncrypt), myAesDecrypt );
4. 与 Axios 集成(更贴近工程实践)
Axios 提供拦截器,更适合做统一加解密。但若坚持用高阶函数风格,可包装 axios 实例方法:
- 用
withRequestEncryption(axios.post, encrypt)包装单个方法 - 或封装
createSecuredClient()工厂函数,返回带拦截逻辑的实例 - 注意:Axios 的 config.body 是 FormData / URLSearchParams 时需特殊处理,避免误加密
真实项目中,推荐结合拦截器 + 高阶函数思想:拦截器负责流程控制,加解密逻辑抽成纯函数,便于单元测试和复用。


















