将 GraphQL 引入 NestJS 应用程序

阅读时长 4 分钟读完

在现代 Web 开发中,GraphQL 是一个非常流行的 API 定义语言。它可以简化 API 设计,提高前端性能并消除 API 更新的版本控制问题。在 NestJS 应用程序中使用 GraphQL 可以提供更好的查询执行控制,并且不需要在路由中分析请求参数。

本篇文章将会详细介绍如何在 NestJS 应用程序中使用 GraphQL。我们将介绍如何配置应用程序来使用 GraphQL,如何创建 GraphQL schema,并且如何编写 GraphQL resolver。

准备工作

在开始之前,我们需要安装 NestJS 和 GraphQL 库:

配置应用程序

首先,我们需要在应用程序中配置 GraphQL。

在 NestJS 中,我们可以使用 GraphQLModule 来配置 GraphQL。只需要将其添加到应用程序的模块中,并传递一些配置参数,例如:GraphQL schema。在 imports 属性中添加 GraphQLModule。我们还需要使用 ForRoot() 方法为应用程序提供配置参数。

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

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

在上面的代码中,我们做了以下配置:

  • autoSchemaFile: 用于生成 GraphQL schema 的输出路径。这表示,将会有一个名为 schema.gql 的文件存储自动生成的 schema。
  • imports: 我们将 GraphQLModule 添加到 AppModule 的 imports 数组中。

这样我们就配置了 GraphQLModule。

创建 GraphQL resolver

接下来,我们需要创建并定义 GraphQL resolver。Resolver 负责接收客户端发起的请求,并执行相应的数据库操作。

打开你的控制器文件夹,并创建一个新的 resolver。在这里我们将使用 @Resolver() 装饰器来定义我们的 GraphQL 查询。

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

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

在示例代码中,我们创建了一个名为 CatResolver 的 resolver。我们使用了 @Query() 装饰器来定义指向查询之间的映射。 然后我们执行了一个 hello() 函数并返回一个字符串。

编写 GraphQL schema

接下来,我们需要定义用来描述数据的类型。 schema 定义了数据类型并说明查询能够返回的数据。

在 NestJS 中,我们可以使用 Graphql-tools 来定义 schema。简单地说,schema 就是一个描述 API 功能的文档。

创建一个新文件 src/schema.graphql ,并定义 GraphQL 的查询类型和返回值。在示例代码中,我们定义了 hello() 函数,该函数返回一个字符串 "meow"

启动应用程序

最后,我们将要启动应用程序并测试我们的 GraphQL 端点。

为了测试我们的 hello 查询,我们将使用 Postman 将请求发送到 http://localhost:3000/graphql

在 Postman 中,构建一个 POST 请求:

我们可以看到在响应中,我们得到了我们在 resolver 中定义的字符串 "meow"

总结

在本文中,我们介绍了如何在 NestJS 应用程序中使用 GraphQL。我们了解了如何配置应用程序和定义 GraphQL schema 和 resolver。将 GraphQL 引入 NestJS 应用程序可以提高代码的可读性和可维护性,简化前后端之间的沟通,同时也能够简化 API 设计和查询执行过程。

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

纠错
反馈