费率限制-贴出
A 类 PostgreSQL 存储
express-rate-limit
中间软件.
安装
从 npm 注册 :
# Using npm
> npm install --save @acpr/rate-limit-postgresql
# Using yarn or pnpm
> yarn/pnpm add @acpr/rate-limit-postgresql
使用量
使用功能示例 rate-limit-postgresql 可见于
跟踪寄存器
let rateLimit = require('express-rate-limit')
let postgresStores = require('@acpr/rate-limit-postgresql')
let limiter = new RateLimit({
store: new postgresStores.PostgresStore(
{
user: 'postgres',
password: 'postgres',
host: 'localhost',
database: 'rate-limit',
port: 5432,
},
'aggregated_store',
),
windowMs: 15 * 60 * 1000, // 15 minutes
max: 3, // Limit each IP to 3 requests per `window` (here, per 15 minutes)
message:
'Too many accounts created from this IP, please try again after 15 minutes',
standardHeaders: 'draft-7', // Set `RateLimit` and `RateLimit-Policy`` headers
legacyHeaders: false,
})
// apply to all requests
app.use(limiter)
导入
该图书馆以无害环境管理和CJS表格提供,并与二者合作 Javascript和Typescript项目.
这个软件包需要您使用节点16或以上.
在 CommonJS 项目中导入它 (type: commonjs 或者没有 type 输入
package.json)如下:
let postgresStores = require('@acpr/rate-limit-postgresql')
在无害环境管理项目中导入(type: module 内 package.json)如下:
import postgresStores from '@acpr/rate-limit-postgresql'
配置
邮政仓库类型
Postgres商店有两种不同的类型:
PostgresStoreAggregatedIP(默认)PostgresStore建筑师)- 如下表所示,该列表汇总了表中的IP数
| 键 | 会话( d) | 计数 |
|---|---|---|
| 192.168.1.1 (中文(简体) ) | 1个 | 3个 |
| 192.168.2.1 (中文(简体) ) | 1个 | 1个 |
PostgresStoreIndividualIP- 将每个请求的IP存储在 单独行(如下表所示)并进行汇总 在单独的一步
| 编号 | 键 | 会话( d) | 事件( t) |
|---|---|---|---|
| 1个 | 192.168.1.1 (中文(简体) ) | 1个 | 2023-09-13 T07:40:09+00:00 (中文(简体) ) |
| 2个 | 192.168.1.1 (中文(简体) ) | 1个 | 2023-09-13 T07:40:10+00:00 (中文(简体) ) |
| 3个 | 192.168.1.1 (中文(简体) ) | 1个 | 2023-09-13 T07:40:11+00:00 (中文(简体) ) |
| 页:1 | 192.168.2.1 (中文(简体) ) | 1个 | 2023-09-13 T07:40:11+00:00 (中文(简体) ) |
说明: 数据库使用UUID作为ID的数据类型,表格中包含 整数作为ID来保持插图简单.
构造器
这两类商店在构造器中都采用了相同的输入
config- 数据库配置在 节点后置 配置 .prefix- 会话的独有名称(在数据库中长期存在)。 用于 双数检查,以避免在键被计算两次时出现假阳性, 但前缀不同.
安装
项目许可证在 许可证文件第三方 许可证存放于 第三方 许可证文件夹