快速开始
最简 1 行接入,5 分钟理解完整配置。
安装
bash
npm install @hydd/request-guardbash
pnpm add @hydd/request-guardbash
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 请求已享有防重保护。

