介绍
GraphQL 是一种由 Facebook 开发的查询语言和执行语言,它提供了一种更高效、更强大的方式来定义 API。NestJS 是一种用于构建高效且可维护的 Node.js 服务器端应用程序的框架。
在本篇文章中,我们将介绍在 NestJS 中使用 GraphQL 的方式,使用了 TypeScript 和 Apollo Server。
安装
首先,我们需要安装必要的依赖包。
npm install @nestjs/graphql graphql apollo-server-express
然后,我们需要启用 NestJS 中的 GraphQL 功能。为此,我们需要在 app.module.ts
文件中导入 GraphQLModule
模块。
-- -------------------- ---- ------- ------ - ------ - ---- ----------------- ------ - ------------- - ---- ------------------ --------- -------- - ----------------------- --------------- ----- --- -- -- ------ ----- --------- --
在这个例子中,我们使用了 autoSchemaFile
配置,这样在应用程序启动时就会自动生成一个 GraphQL schema。这个 schema 是由 src/graphql
目录中的 TypeScript 类型定义生成的。
定义 GraphQL Schema
接下来,我们需要定义我们的 GraphQL schema。
首先,我们需要创建一个 src/graphql
目录,并在其中创建 schemas.ts
文件。
-- -------------------- ---- ------- ------ - ----------- ------ -- - ---- ------------------ ------------- ------ ----- ---- - ----------- -- --- --- ------- -------- ----- ------- -------- ------ ------- ----------- -- ------- ------ ------- - ------------- ------ ----- ---- - ----------- -- --- --- ------- -------- ------ ------- -------- -------- ------- ----------- -- ----- ------- ----- -
在这个例子中,我们定义了两个类型:User
和 Post
。我们还定义了每个类型的属性和类型。
接下来,我们需要为这些类型创建解析器。解析器是一个函数,它可以接收 GraphQL 查询,并返回对应的数据。
在 src/graphql
目录中创建 resolvers.ts
文件。
-- -------------------- ---- ------- ------ - ------ --------- ----- ------------- ------ - ---- ------------------ ------ - ----- ---- - ---- ------------ ------ - ------------ - ---- ------------------------- ------ - ------------ - ---- ------------------------- ------------ -- ----- ------ ----- ------------- - ------------------- -------- ------------- ------------- -- -------------- -- ----- - ----- ------ -- ----- ------------------- --- -------- ------------- - ------ ------------------------------ - ---------------------- ------- -- ------- ----- ------------------ ----- ------ --------------- - ------ -------------------------------------- - - ------------ -- ----- ------ ----- ------------- - ------------------- -------- ------------- ------------- ------- -------- ------------- ------------- -- -------------- -- ----- - ----- ------ -- ----- ------------------- --- -------- ------------- - ------ ------------------------------ - ----------------------- ------- -- ----- ----- ------------------- ----- ------ ------------- - ------ ----------------------------------------- - -
在这个例子中,我们创建了两个解析器:UsersResolver
和 PostsResolver
。UsersResolver
负责解析与用户相关的查询,如 getUser
和 getPosts
。PostsResolver
负责解析与文章相关的查询,如 getPost
和 getAuthor
。
我们使用 @Resolver
装饰器来标记我们的解析器。我们还使用 @Query
装饰器来标记我们的查询函数,并向 GraphQL schema 中添加一个查询。
我们还使用 @ResolveField
装饰器来标记我们的字段解析器。这个装饰器允许我们解析一个对象类型的字段,它接收一个函数作为参数,该函数可以返回一个解析的值。
集成 Apollo Server
现在我们已经定义了我们的 GraphQL schema 和解析器,我们需要将它们集成到我们的 NestJS 应用程序中。为此,我们需要在 main.ts
文件中创建 Apollo Server。
-- -------------------- ---- ------- ------ - ----------- - ---- --------------- ------ - --------- - ---- --------------- ------ - ------------ - ---- ------------------------ ------ - -------------- - ---- --------------------------- ------ - -- ------- ---- ---------- ----- -------- ----------- - ----- ------ - --- -------------- --------- ----------------------------- ---------- - ------ - ----------------------- ----------------------- -- ----- ------------------- ----- ------------------- -- --- ----- --- - ----- ----------------------------- --- --------------------------- ----- --------------- ------------------------ --- --- ----- ----------------- - ------------
在这个例子中,我们创建了一个 Apollo Server,并将它添加到我们的 Express 应用程序中。我们传递了 typeDefs
和 resolvers
选项,以指定我们的 GraphQL schema 和解析器。
我们还需要传递 app
对象到 ApolloServer
的 applyMiddleware
方法中。这个方法负责将 Apollo Server 添加到我们的 Express 应用程序中。
发送 GraphQL 请求
我们已经完成了在 NestJS 中使用 GraphQL 的所有准备工作,现在我们可以通过发送 GraphQL 查询来测试我们的应用程序。
使用 curl 发送请求:
curl -XPOST http://localhost:3000/graphql -H 'Content-Type: application/json' -d '{"query":"{ user(id: \"1\") { id name email posts { id title content } } }"}'
我们还可以使用 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