npm 包 graphql-middleware 使用教程

阅读时长 6 分钟读完

graphql-middleware 是一个 Node.js 的中间件集合,用于在 GraphQL 查询进出执行之前或之后可以对其进行中间件功能的扩展。本文将介绍如何使用 npm 包 graphql-middleware 进行 GraphQL 应用程序的中间件开发。

1. 安装

使用 npm 安装 graphql-middleware:

2. 编写中间件

为了演示 graphql-middleware 的使用,我们将编写一个简单的 demo,实现对授权的身份验证。首先,编写授权中间件文件 authorize.js:

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

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

-------------- - -
  ----------------
--
展开代码

以上代码中,我们利用 graphql-shield 提供的 rule 函数创建了一个 GraphQL 中间件 isAuthenticated,用于判断是否已经登录。如果当前上下文 context 中没有 user 属性,则中间件会抛出 ForbiddenError 异常。

3. 使用中间件

接着,我们在 schema.js 中集成该中间件:

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

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

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

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

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

-------------- - -------
展开代码

这里我们用 applyMiddleware 将 isAuthenticated 中间件添加到 schema 中。这样一来,在每次执行 Query 中 me 的时候,都会先经过 isAuthenticated 验证身份。

4. 运行示例

在示例中,我们使用 apollo-server 作为 GraphQL 服务器,在 index.js 中编写服务器代码:

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

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

----------------------- --- -- -- -
  --------------- ------ ----- -- ---------
---
展开代码

在如上代码中,我们添加了 context,用于在每次查询执行之前获取用户信息,并将其传递到 GraphQL 中。有关如何验证 token、获取用户信息并判断用户是否登录的详细示例,请参考:验证 token 并获取用户信息示例代码

从终端上运行该 demo 应用程序:

在浏览器中访问 http://localhost:4000 以查看 GraphQL Playground。在名为 HTTP HEADERS 的栏中添加 token 信息,例如:

接着,在 Query 栏中运行如下代码:

如果你的 token 是有效的,那么你会看到查询结果:

-- -------------------- ---- -------
-
  ------- -
    ----- -
      ----- ----
      ------- -------
      -------- ------------------
    -
  -
-
展开代码

反之,如果 token 无效,则会返回错误:

-- -------------------- ---- -------
-
  ------- -----
  --------- -
    -
      ---------- ---- ---------------
      ------------ -
        -
          ------- --
          --------- -
        -
      --
      ------- ------
    -
  -
-
展开代码

5. 总结

在本文中,我们学习了如何使用 graphql-middleware npm 包,实现了一个检查用户是否已登录的授权中间件。graphql-middleware 让开发者能够在应用程序中以一种可复用、灵活的方式增强 GraphQL 查询逻辑,毫无疑问,这对于我们构建高质量的 GraphQL 应用程序是至关重要的。

除了身份验证外,graphql-middleware 还可用于请求速率限制、日志记录、缓存控制等。当你需要在 GraphQL 的每个请求之前或之后执行一些操作的时候,graphql-middleware 绝对是你的首选之一。

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