Skip to content

请求速率限制

为了减轻服务器的压力,或者防止服务攻击,请求的频率需要被严格控制

安装

bash
pnpm add @aomex/rate-limit

使用

typescript
// src/web.ts
import { WebApp } from '@aomex/core';
import { rateLimit } from '@aomex/rate-limit';

const app = new WebApp({
  mount: [rateLimit()],
});

参数

store

类型:RateLimitStore

存储和共享请求记录。不填则代表只在当前进程使用。

如果想在集群中共享记录如下引擎:

id

类型:(ctx: WebContext) => string | false

请求客户端的身份识别信息,默认使用客户端的IP地址。如果返回false,则代表该请求不需要限速

duration

类型:number
默认值:3600 * 1000

限速时间周期。单位:ms

maxRequest

类型:number

一个客户端(根据id字段)在一个时间周期内的最大可请求数量

errorMessage

类型:string

被限速(状态码:429)时响应的报错信息

headers

相关的响应头部名称。如果传入false,则代表不设置

typescript
rateLimit({
  headers: {
    remain: 'X-RateLimit-Remaining',
    reset: 'X-RateLimit-Reset',
    total: 'X-RateLimit-Limit',
  },
});

allowList

类型:(ctx: WebContext) => boolean | Promise<boolean>

白名单,不做请求频率限制

denyList

类型:(ctx: WebContext) => boolean | Promise<boolean>;

黑名单,直接抛出403状态码