Skip to content

快速开始

最简 1 行接入,5 分钟理解完整配置。

安装

bash
npm install @hydd/request-guard
bash
pnpm add @hydd/request-guard
bash
yarn add @hydd/request-guard

极简接入:1 行代码

如果你用 axios,只需要一行就能给所有请求加上守护。不传 logger 时会自动用内置的开发日志,dev: true 让它在开发环境输出诊断信息:

javascript
import axios from 'axios';
import { setupRequestGuard } from '@hydd/request-guard';

// 一行接入:所有 POST 请求自动防重,开发环境自动输出诊断日志
setupRequestGuard(axios, {
  dev: true,                                    // 开发环境输出日志(生产环境自动静默)
  rules: [{ method: 'post', duplicate: true }]  // 所有 POST 自动防重
});

// 业务代码无需任何改动
axios.post('/api/order/submit', { orderId: '12345' });

// 现在快速双击提交按钮,第二次请求默认会被 ignore:不发请求,也不触发 then/catch
// 开发环境控制台会输出 duplicate.triggered 日志,告诉你拦了什么、为什么拦

就这一步,你的所有 POST 请求已经享有防重保护。双击同一个提交按钮,第二次请求根本不会发出;默认 ignore 策略也不会触发调用方的成功或失败回调。

怎么验证它生效了?

连续调用两次相同的 POST 请求,打开浏览器控制台:第一次正常发出,第二次会看到 duplicate.triggered 日志。如果配了 notify,还会弹出提示;默认 ignore 策略下,第二次调用的 Promise 会一直 pending。

渐进式:加上提示和更多能力

当你需要给用户提示、或加上更多治理能力时,逐步补充配置即可:

javascript
import axios from 'axios';
import { setupRequestGuard } from '@hydd/request-guard';

const requestManager = setupRequestGuard(axios, {
  dev: true,  // 开发环境输出诊断日志(不传 logger 时自动用内置日志)

  // 用户提示出口:防重命中、熔断拦截时通知用户
  notify: (payload) => Toast.show(payload.message),

  // 全局默认配置:各能力的默认参数
  defaults: {
    duplicate: { strategy: 'ignore', message: '请勿重复提交' },
    retry: { attempts: 3, delay: 200, backoff: 'exponential' }
  },

  // 规则:声明哪些请求自动启用什么治理
  rules: [
    { method: 'post', duplicate: true },        // POST 自动防重
    { method: 'get', retry: true }              // GET 失败自动重试
  ]
});

// 业务代码无需任何改动
axios.post('/api/order/submit', { orderId: '12345' });

接入完成,所有 POST 请求已享有防重保护。

接下来

基于 MIT 许可发布