简介
hapijs-mongoose-rate-limit是一种可轻松限制用户在一段时间内发送请求的npm包。它使用了HapiJS框架与Mongoose模型一起工作,并使用计数器算法限制了重复请求的速率。
安装
首先需要安装好HapiJS和Mongoose包。然后可以通过以下命令安装hapijs-mongoose-rate-limit包:
npm install hapijs-mongoose-rate-limit
用法
首先,需要添加包中间件:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- -------- - -------------------- ----- ----------- - -------------------------------------- -------------------------------------------- - ---------------- ----- ------------------- ----- --- ----- ------ - --- ------------- ----- ----- --- ----------------- ------- ------------ -------- - --------- ----- ------------ ---- -------------- --------- -- --------------------------- -------------- --------------------------- --- ----------------- -------- ------- ------ - ----- ------- -------- - -- --------- - ----- ----- --------- ---- -- ---------- - ----- ----- --------- ---- -- -- - ----------- ----------- --- ------------- -- ---
接下来,可以将LimitMiddleware应用于任何请求路由。下面是一个简单的示例:
-- -------------------- ---- ------- ----- ------- - --------- -- -- - ------ ------ -------- -- -------------- ------- ------ ----- ---- ------- - -------- - ---------- - -------- ----- -- -- -------- -- ---
这个例子将为根路径配置了一个’sLOW’的限制器函数。如果同一个IP访问此路由超过100次,在3600秒内,将会返回一个HTTP错误429 ‘Too Many Requests'
。
配置项
- duration(必选): integer,计数器重置间隔时间,以秒为单位。
- maxRequests(必选): integer,时间窗口内的最大请求数。
- userKeyGetter(必选):一个获取用户 keyed 的 getter 函数,可以是任何请求级别的值,例如 URL 字段,IP地址等
- mongooseModel(必选): Mongoose框架的数据模型,用于存储和更新限制器计数器的状态。
- keyPrefix(可选): 限制器键的前缀,用于为防止键冲突添加命名空间。
- blockDuration(可选): integer,当阈值超过时,该值表示用户/ IP的错误请求将被拒绝的时间长度(以秒为单位)。
- whitelist(可选):数组,列出在不受任何限制器限制的用户列表。
- blacklist(可选):数组,列出绕过任何限制器限制的用户列表。
- trustProxy(可选):如果本地 proxy 已经被配置,则这个值需要设为 true。
总结
使用hapijs-mongoose-rate-limit包,我们可以减少服务器端上的请求数量,在预防DDoS攻击的情况下,增强了应用程序的安全性。它也提供了可修改和自定义的配置项,使得在应用不同场景下可以做不同的适配和定制。如果你需要保护你的应用程序,那么hapijs-mongoose-rate-limit包是一个值得一试的npm包。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055bdc81e8991b448d9803