npm 包 @intabulas/nodal-middleware-ratelimit 使用教程

阅读时长 4 分钟读完

在现代 Web 应用程序的开发中,限制 API 请求速率是常见的需求。@intabulas/nodal-middleware-ratelimit 是一个帮助 Node.js 开发者限制 API 请求速率的 npm 包。本文将为你提供 @intabulas/nodal-middleware-ratelimit 的详细教程,包括安装、基本使用和高级用法。

安装

使用 npm 安装 @intabulas/nodal-middleware-ratelimit 可以通过以下命令来完成安装过程:

基本使用

下面是一个基本的使用示例:

-- -------------------- ---- -------
----- ------- - -------------------
----- --------- - -------------------------------------------------

----- --- - ----------

-------------------
  --------- -- - -- - ----- -- -- -------
  ---- --- -- ----------------- --- -
----

-- ----------

上述代码中的 rateLimit 函数是一个 Express 中间件,用于限制客户端请求的速率。通过设置 windowMs 参数,我们可以指定每个时间窗口的时长,以及通过 max 参数来指定客户端在时间窗口内的最大请求数。

如果一个客户端在时间窗口内请求的次数超出了 max 参数的限制,那么该客户端将收到一个 HTTP 状态码为 429 的响应。

高级用法

自定义响应头、响应体和 Key

-- -------------------- ---- -------
-------------------
  --------- -- - -- - -----
  ---- ----
  -------- -----------------
  -------- -----
  -------- ------------- ---- -
    ----------------------
      ----- ----
      -------- -----------------
      ----- ----
    ---
  --
  ------------- ------------- ---- -
    ------ -------
  -
----

一般来说,我们可以使用默认的响应头和响应体,但是如果你想自定义这些内容,可以像上述代码中一样使用 messagehandler 参数。同时,如果你想添加 X-RateLimit-* 的响应头,可以将 headers 参数设置为 true。

在某些情况下,你可能希望使用自定义的唯一标识符,而不是默认的 IP 地址。在这种情况下,你可以使用 keyGenerator 参数来为每个限制器生成一个自定义的 key。

禁止访问

-- -------------------- ---- -------
-------------------
  --------- -- - -- - -----
  ---- ---
  ----------------------- -----
  -------- ------------- ---- -
    ----------------------
      ----- ----
      -------- -----------
      ----- ----
    ---
  -
----

默认情况下,当一个客户端在时间窗口内超出了限制的请求次数,该客户端将收到一个 HTTP 状态码为 429 的响应。但在某些情况下,你可能希望直接禁止该客户端的访问。为此,你可以设置 skipSuccessfulRequests 参数为 true 并使用自定义的错误处理程序(handler)返回适当的 HTTP 状态码。

最佳实践

  • 为每个 API 路由使用单独的限制器,以便更好地控制请求速率。
  • 使用自定义响应体和响应头以提高用户体验。

总结

在本文中,我们介绍了如何使用 @intabulas/nodal-middleware-ratelimit 包来限制 Node.js 应用程序中的 API 请求速率。我们讨论了基本用法和高级用法,并提供了一个最佳实践列表,以帮助你更好地控制你的请求速率。祝你在开发 Web 应用程序时使用它们愉快!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066bc2967216659e244218

纠错
反馈