npm 包 express-graphql-custom-req-limit 使用教程

阅读时长 7 分钟读完

简介

GraphQL 是一种用于 API 的查询语言,它对前端开发人员来说是一个很有用的工具。而 express-graphql-custom-req-limit 则是一个基于 Express 框架的 GraphQL 中间件,可以限制 GraphQL API 每次请求的数据量和请求次数。

本文将会介绍如何使用 express-graphql-custom-req-limit 这个 npm 包,并针对其中的关键技术进行详细解析。

安装

首先,你需要安装 express 和 express-graphql-custom-req-limit 这两个 npm 包:

使用

使用 express-graphql-custom-req-limit 需要先创建一个 GraphQL schema:

接着,创建一个 Express 应用程序,并将 schema 和中间件添加到应用程序中:

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

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

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

现在,你已经可以通过访问 http://localhost:3000/graphql 来进行 GraphQL 查询了。

配置

默认情况下,express-graphql-custom-req-limit 使用了如下的默认值:

  • 每次请求的数据量上限为 1MB;
  • 每 10 秒最多可以处理 10 次请求;
  • 当某一时刻请求数超过了上限时,会返回 HTTP 状态码为 429 的错误。

如果需要自定义这些限制,你可以在调用 graphqlHTTP() 函数时传入一个 options 对象:

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

可以看到,我们在 options 对象中传入了三个参数:

  • maxBytes:每次请求的数据量上限,单位为字节;
  • maxCalls:每 10 秒最多可以处理的请求次数;
  • error:用于自定义错误处理函数。

另外,我们也可以使用 onExceededMax 参数来控制当某一时刻请求数超过了上限时的响应行为:

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

解析

机器无法识别自然语言,因此客户端向服务端发送的查询请求必须使用一个特定的 JSON 格式,称为 GraphQL 查询语言。这个格式看起来很像 JavaScript 对象,比如:

上述查询语言的含义是:获取英雄(hero)的名字(name)和其朋友(friends)的名字(name)。

如何将这些查询语言翻译成实际的数据呢?这就是 GraphQL schema 要实现的内容了。一个 schema 包含了一些 type(类型),而每个 type 又包含了一些字段(field)。比如,我们可以定义一个名为 Query 的 type,它包含了一个名为 hello 的字段:

该 schema 定义了一个字符串(String)类型的字段 hello,用于返回一个字符串。这样,在服务端即可写下如下处理函数:

最后,我们将 schema 和处理函数提供给 express-graphql-custom-req-limit 中间件,并使用 Express 启动服务器:

现在,我们可以通过访问 http://localhost:4000/graphql 来进行 GraphQL 查询,并返回一段字符串 Hello world!

示例代码

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

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

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

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

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

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

总结

本文简要介绍了 npm 包 express-graphql-custom-req-limit 的使用方法,并对其中涉及到的关键技术进行了详细描述。通过本文的学习,读者可以全面掌握 GraphQL 和 express-graphql-custom-req-limit 的使用,并且能更好地理解 GraphQL 中间件的原理。同时,本文也提供了一个完整的示例代码,供读者参考。

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

纠错
反馈