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

简介

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


猜你喜欢

  • npm 包 eslint-config-ufhealth 使用教程

    介绍 eslint-config-ufhealth 是一个针对 UF Health(佛罗里达大学医学院)前端项目的 eslint 配置包,它能够规范代码风格,提高代码质量和稳定性。

    3 年前
  • npm包ncb-datepicker使用教程

    日期选择器是Web开发中常用的控件之一,它不仅美观实用,而且可以方便地使用。前端开发人员在开发这种控件时经常会使用日历选择器npm包。在本文中,我们将介绍如何使用npm包ncb-datepicker,...

    3 年前
  • npm 包 ppx-tea-jsx 使用教程

    PPX-TEA-JSX 是一个有趣的 npm 包,可以让你在 JavaScript 中使用像 OCaml 中的 JSX 一样的语法,避免了传统的 React 组件中需要引入大量的 React.crea...

    3 年前
  • npm 包 typexs-ng 使用教程

    typexs-ng 是一个强大的 npm 包,它提供了一系列前端开发所需的组件、服务、工具库,以及一些有趣的功能。 安装 你可以在你的项目根目录下使用 npm 安装 typexs-ng: --- --...

    3 年前
  • npm 包 weather-terminal-fem 使用教程

    介绍 Weather-terminal-fem 是一个基于 Node.js 的命令行天气预报工具。通过输入指定的城市名称,该工具可以输出当地的实时天气和未来几天的天气预报。

    3 年前
  • npm 包 uport-verify-email-dev 使用教程

    简介 uport-verify-email-dev 是一个基于 uPort 应用的 npm 包,用于验证用户的电子邮件。通过使用 uPort 的身份验证功能,可以确保电子邮件验证基于分散的身份验证。

    3 年前
  • npm 包 jscodeshift-transport 使用教程

    前言 jscodeshift-transport 是一个 npm 包,它为我们提供了一个方便快捷的方式,使我们能够更加便捷地转换 JavaScript 代码。通过它的封装,我们能够以更加高效、简单的方...

    3 年前
  • NPM 包 node-superdog 使用教程

    简介 node-superdog 是一款基于 Node.js 的轻量级加密库,支持多种加密算法,包括 AES、RSA 等。 它提供简单易用的 API 接口,可以让开发者轻松地在前端或后端项目中使用高强...

    3 年前
  • npm 包 swagger-axios 使用教程

    npm 包 swagger-axios 是一个基于 Swagger API 规范的 API 客户端生成器,可以将 Swagger API 文档转化为可操作的 TypeScript 或 JavaScri...

    3 年前
  • npm 包 flexible-ui-comps 使用教程

    在前端开发中,UI 组件的开发是不可或缺的一环。然而,每一个项目都重新开发一遍 UI 组件无疑是一种浪费。因此,我们可以使用一些开源的 UI 框架或者组件库提高开发效率。

    3 年前
  • npm 包 fe-config 使用教程

    前言 在前端的开发工作中,我们时常需要配置一些公共的参数,例如接口地址、图片地址等等。经常需要在多个文件中进行修改,这样就比较繁琐。而使用 npm 包 fe-config,就可以在一个独立的配置文件中...

    3 年前
  • npm 包 eslint-config-ufhealth-wordpress 使用教程

    随着前端开发的发展,JavaScript 代码已经变得越来越复杂,代码风格的统一和规范已经成为了开发过程中必须要考虑的问题,而 eslint 则成为了 JavaScript 代码风格统一的不二选择。

    3 年前
  • npm 包 @hiherto-elements/gherkin 使用教程

    介绍 在前端开发过程中,测试是一个十分重要的部分,而 Gherkin 是一种基于自然语言编写测试用例的语言,让非技术人员也能参与其中。@hiherto-elements/gherkin 就是一个 Gh...

    3 年前
  • npm 包 instagram-followers 使用教程

    instagram-followers 是一个基于 Node.js 的 npm 包,它可以帮助您获取 Instagram 上某个用户的粉丝列表。它提供了一个简单易用的 API 接口,能够帮助您快速地集...

    3 年前
  • npm 包 jest-handlebars-loader 使用教程

    前言 在前端的开发过程中,我们经常需要编写测试代码来确保我们编写的代码能够正常运行并且符合预期。而一个好的测试工具可以帮助我们更轻松地进行测试,而且能够提高我们的测试效率和质量。

    3 年前
  • NPM 包 Kickstarts 使用教程

    NPM 是前端开发中不可或缺的工具,可以让我们方便地管理代码依赖和发布代码包。而 Kickstarts 则是一个非常有用的 NPM 包,它可以帮助我们快速创建新项目模板,避免重复代码编写和配置。

    3 年前
  • npm 包 tf-serving-js-web 使用教程

    前言 深度学习已经成为当今科技领域的一个重要热点,而 TensorFlow 是目前应用最广泛的深度学习框架之一。在 TensorFlow 的部署和使用中,tf-serving-js-web 是一个非常...

    3 年前
  • npm 包 less-plugin-css-flip-2018 使用教程

    在前端开发中,经常需要使用 CSS 来控制页面的样式。不过,有时我们需要实现页面的镜像效果,使得页面中的文字和图案呈现“镜面翻转”的效果。这时,我们可以使用 less-plugin-css-flip-...

    3 年前
  • npm 包 skimmed-datepicker 使用教程

    随着 Web 技术的发展,前端开发的工具也变得越来越丰富。其中,npm 是前端开发必须掌握的一个工具。它可以让我们更方便地管理和使用第三方库和组件。skimmed-datepicker 是一个常用的日...

    3 年前
  • npm 包 warp-api 使用教程

    在前端开发中,经常需要与后端服务器进行数据交互。而为了更加方便地处理数据,我们可以借助一些工具来简化这个过程。其中,使用 npm 包 warp-api 是一个很不错的选择。

    3 年前

相关推荐

    暂无文章