美文网首页
关于拦截器防止重复提交除GET请求之外的其他请求

关于拦截器防止重复提交除GET请求之外的其他请求

作者: SevenLonely | 来源:发表于2019-07-17 10:35 被阅读0次

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