npm 包 @koba789/express-graphql 使用教程

阅读时长 9 分钟读完

介绍

@koba789/express-graphql 是一个基于 Express 的 GraphQL 中间件,用于构建高效的 GraphQL API。

这个包基于 express-graphql,但是添加了很多功能和高度抽象的特性。它是一个非常强大的工具,特别是当你想要在使用 GraphQL 的同时也能够享受到 Express 的极大灵活性时。

在这篇文章中,我们将详细介绍如何使用 @koba789/express-graphql,让你轻松地开始构建自己的 GraphQL API。同时,我们还将分享其中一些有用的功能和技巧。

安装

安装 @koba789/express-graphql 的最简方式就是在终端执行以下命令:

使用

让我们来看一下如何使用 @koba789/express-graphql,我们需要创建一个 GraphQLSchema,这样我们就可以在服务器上查询数据。

你可以创建自己的 GraphQLSchema,也可以使用一些现成的,如 GraphCMS。下面是基于一个 GraphQLSchema 的示例:

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

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

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

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

接下来,我们需要使用 @koba789/express-graphql,它的用法类似于 Express 中的路由:

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

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

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

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

现在我们可以在 http://localhost:3000/graphql 访问 GraphiQL 页面,这是一个带有自动完成功能和实时查询功能的 IDE,可以方便地进行查询、测试和调试。

高级用法

数据库连接

使用 GraphQL 的主要目标之一是获取和更新你的后端数据。所以常常需要与数据库进行连接。在使用 @koba789/express-graphql 时,你可以在 context 对象中传入一个数据库连接,以便在 GraphQL 解析器中使用。

在之前的查询示例中,我们传入了 context 对象,但我们还需要在上下文中传入数据库连接:

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

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

然后,你可以在你的 GraphQL 解析器中使用这个数据库连接:

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

认证

GraphQL 中的认证是一个非常广泛和复杂的话题。但基本的想法是,你将通过某种方式获取到一个凭证,再将这个凭证传递给后端,用于验证该请求是否有权访问受保护的数据。

有许多不同的方式可以实现此目的。在这里,我们将介绍一个使用 JWT (JSON Web Token) 做认证的示例。

首先,你需要安装 npm 包 jsonwebtoken

然后,你需要在你的 ExpressJS 应用程序中实现一个验证函数,用于从 HTTP 请求中提取 JWT 并验证它的有效性:

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

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

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

最后,将验证函数添加到上下文中:

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

然后,在你的 GraphQL 解析器中,你可以根据请求者是否认证来确定他是否有权访问保护的数据:

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

文件上传

在许多应用程序中,可能需要上传文件。而 @koba789/express-graphql 为此提供了很棒的支持。

首先,你需要安装 npm 包 graphql-upload

然后,在你的 ExpressJS 应用程序中处理文件:

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

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

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

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

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

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

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

然后,你就可以在 GraphiQL 中上传文件了:

结论

@koba789/express-graphql 是一个非常强大的工具,可以让你更加高效地构建 GraphQL API。在这篇文章中,我们介绍了如何使用 @koba789/express-graphql,以及如何利用其高级功能,如数据库连接、认证和文件上传。

我们希望这篇文章对你有帮助,并能够开始手动构建自己的 GraphQL API。如果你有任何问题或疑惑,请在评论中留言,我们会尽力为你解答。

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

纠错
反馈