在 NestJS 中使用 GraphQL 的教程

阅读时长 10 分钟读完

介绍

GraphQL 是一种由 Facebook 开发的查询语言和执行语言,它提供了一种更高效、更强大的方式来定义 API。NestJS 是一种用于构建高效且可维护的 Node.js 服务器端应用程序的框架。

在本篇文章中,我们将介绍在 NestJS 中使用 GraphQL 的方式,使用了 TypeScript 和 Apollo Server。

安装

首先,我们需要安装必要的依赖包。

然后,我们需要启用 NestJS 中的 GraphQL 功能。为此,我们需要在 app.module.ts 文件中导入 GraphQLModule 模块。

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

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

在这个例子中,我们使用了 autoSchemaFile 配置,这样在应用程序启动时就会自动生成一个 GraphQL schema。这个 schema 是由 src/graphql 目录中的 TypeScript 类型定义生成的。

定义 GraphQL Schema

接下来,我们需要定义我们的 GraphQL schema。

首先,我们需要创建一个 src/graphql 目录,并在其中创建 schemas.ts 文件。

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

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

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

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

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

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

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

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

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

在这个例子中,我们定义了两个类型:UserPost。我们还定义了每个类型的属性和类型。

接下来,我们需要为这些类型创建解析器。解析器是一个函数,它可以接收 GraphQL 查询,并返回对应的数据。

src/graphql 目录中创建 resolvers.ts 文件。

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

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

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

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

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

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

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

在这个例子中,我们创建了两个解析器:UsersResolverPostsResolverUsersResolver 负责解析与用户相关的查询,如 getUsergetPostsPostsResolver 负责解析与文章相关的查询,如 getPostgetAuthor

我们使用 @Resolver 装饰器来标记我们的解析器。我们还使用 @Query 装饰器来标记我们的查询函数,并向 GraphQL schema 中添加一个查询。

我们还使用 @ResolveField 装饰器来标记我们的字段解析器。这个装饰器允许我们解析一个对象类型的字段,它接收一个函数作为参数,该函数可以返回一个解析的值。

集成 Apollo Server

现在我们已经定义了我们的 GraphQL schema 和解析器,我们需要将它们集成到我们的 NestJS 应用程序中。为此,我们需要在 main.ts 文件中创建 Apollo Server。

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

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

在这个例子中,我们创建了一个 Apollo Server,并将它添加到我们的 Express 应用程序中。我们传递了 typeDefsresolvers 选项,以指定我们的 GraphQL schema 和解析器。

我们还需要传递 app 对象到 ApolloServerapplyMiddleware 方法中。这个方法负责将 Apollo Server 添加到我们的 Express 应用程序中。

发送 GraphQL 请求

我们已经完成了在 NestJS 中使用 GraphQL 的所有准备工作,现在我们可以通过发送 GraphQL 查询来测试我们的应用程序。

使用 curl 发送请求:

我们还可以使用 GraphQL Playground 来测试我们的应用程序。为此,我们需要在 main.ts 中启用它。

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

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

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

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

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

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

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

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

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

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

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

然后,我们打开 http://localhost:3000/graphql,就可以看到 GraphQL Playground 界面了。

在 Playground 中,我们可以使用交互式 UI 来构建和发送 GraphQL 查询和变异。要运行查询,只需单击“运行”按钮即可。

总结

在本篇文章中,我们介绍了如何在 NestJS 中使用 GraphQL。我们首先安装必要的依赖包,然后定义了我们的 GraphQL schema 和解析器。我们还将 Apollo Server 集成到我们的 NestJS 应用程序中,并在 GraphQL Playground 中测试了应用程序。

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

纠错
反馈