在现代 Web 开发中,GraphQL 是一个非常流行的 API 定义语言。它可以简化 API 设计,提高前端性能并消除 API 更新的版本控制问题。在 NestJS 应用程序中使用 GraphQL 可以提供更好的查询执行控制,并且不需要在路由中分析请求参数。
本篇文章将会详细介绍如何在 NestJS 应用程序中使用 GraphQL。我们将介绍如何配置应用程序来使用 GraphQL,如何创建 GraphQL schema,并且如何编写 GraphQL resolver。
准备工作
在开始之前,我们需要安装 NestJS 和 GraphQL 库:
npm install --save @nestjs/graphql apollo-server-express graphql-tools
配置应用程序
首先,我们需要在应用程序中配置 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"
。
type Query { hello: String }
启动应用程序
最后,我们将要启动应用程序并测试我们的 GraphQL 端点。
为了测试我们的 hello
查询,我们将使用 Postman 将请求发送到 http://localhost:3000/graphql
。
http://localhost:3000/graphql
在 Postman 中,构建一个 POST
请求:
{ hello }
我们可以看到在响应中,我们得到了我们在 resolver 中定义的字符串 "meow"
。
{ "data": { "hello": "meow" } }
总结
在本文中,我们介绍了如何在 NestJS 应用程序中使用 GraphQL。我们了解了如何配置应用程序和定义 GraphQL schema 和 resolver。将 GraphQL 引入 NestJS 应用程序可以提高代码的可读性和可维护性,简化前后端之间的沟通,同时也能够简化 API 设计和查询执行过程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6481480748841e98940b76cc