关于拦截器防止重复提交除GET请求之外的其他请求
1.在1秒内不能重复提交相同参数的请求,添加判断方法、
// -----------检测重复提交-----------
// 近期提交记录
const recentSubmits = [];
// 是否是重复提交,参数是请求配置对象
const isRepeatSubmit = (config) => {
// 忽略GET请求
if (config.method == 'GET') {
return false;
}
// 请求对象
let submit = {
// 唯一标识
uuid: config.method + config.url,
// 时间戳
time: new Date().getTime()
};
// 请求参数,POST、PUT用.data,DELETE用.params
let params = config.body;
// 将请求参数JSON附加到请求对象唯一标识
if (params instanceof Object) {
submit.uuid += JSON.stringify(params);
} else {
submit.uuid += params;
}
// 检测结果变量
let result = false;
// 遍历近期提交记录
for (let i = 0; i < recentSubmits.length; i++) {
const lastSubmit = recentSubmits[i];
// 请求对象如果近期发生过那么更新检测结果
if (submit.uuid === lastSubmit.uuid &&
submit.time - lastSubmit.time < 1000) {
result = true;
break;
}
}
// 更新近期提交记录,最多保留5条
recentSubmits.push(submit);
if (recentSubmits.length > 5) {
// 移除第一条记录
recentSubmits.shift();
}
// 返回结果
return result;
}
本文标题:关于拦截器防止重复提交除GET请求之外的其他请求
本文链接:https://www.haomeiwen.com/subject/iwgflctx.html
网友评论