GraphQL 是一种用于 API 的查询语言和运行时环境。它可以被用于任何语言和框架中,包括 Node.js。在本文中,我们将介绍如何在 Node.js 中使用 GraphQL 来制作实时应用程序。
什么是 GraphQL?
GraphQL 是一种用于 API 的查询语言和运行时环境。它提供了一种更高效、更强大的方式来从服务器获取数据。与 REST 相比,GraphQL 允许客户端精确地指定它需要哪些数据,而不需要请求整个资源。
GraphQL 的核心概念是类型系统。类型系统描述了可以查询的数据的结构。每个 GraphQL 服务都有一个类型系统,客户端可以使用它来构建查询。查询由一个或多个字段组成,每个字段都有一个返回类型。
如何在 Node.js 中使用 GraphQL?
要在 Node.js 中使用 GraphQL,我们需要安装 graphql
和 express-graphql
模块。我们可以使用以下命令来安装它们:
npm install graphql express-graphql
安装完成后,我们可以开始编写代码。
首先,我们需要创建一个 GraphQL schema。这个 schema 描述了我们的数据模型和可用的查询。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - ------------------ -------------- ------------- - - ------------------- ----- -------- - --- ------------------- ----- ------- ------- - --- - ----- ------------- -- ----- - ----- ------------- -- ------ - ----- ------------- -- -- --- ----- --------- - --- ------------------- ----- -------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- -------- ------ ----- -------- ----- -- - -- ---- -- -- -- --- ----- ------ - --- --------------- ------ ---------- ---
在这个例子中,我们定义了一个 UserType
,它有 id
、name
和 email
字段。我们还定义了一个 QueryType
,它有一个 user
字段,用于查询用户。resolve
函数用于实现查询逻辑。
接下来,我们需要创建一个 GraphQL 服务器。我们可以使用 express-graphql
模块来创建它。以下是一个简单的例子:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- --- - ---------- -------- ----------- ------------- ------- ------- --------- ----- -- -- ---------------- -- -- - ------------------- ------- -- ---- ------- ---
在这个例子中,我们创建了一个 Express 应用程序,并使用 graphqlHTTP
中间件创建了一个 GraphQL 服务器。我们将 schema
传递给中间件,并设置 graphiql
选项为 true
,以便使用 GraphiQL 工具进行调试。
现在我们已经创建了一个 GraphQL 服务器,我们可以使用它来查询数据。以下是一个简单的例子:
query { user(id: "1") { name email } }
这个查询将返回 ID 为 1 的用户的名字和电子邮件。
如何制作实时应用程序?
GraphQL 允许我们使用订阅来实现实时应用程序。订阅允许客户端接收服务器端的推送通知。
要使用订阅,我们需要使用 graphql-subscriptions
模块。我们可以使用以下命令来安装它:
npm install graphql-subscriptions
安装完成后,我们可以修改我们的 schema 来支持订阅。以下是一个简单的例子:
-- -------------------- ---- ------- ----- - ------------------ -------------- ------------- - - ------------------- ----- - ------ - - --------------------------------- ----- ------ - --- --------- ----- -------- - --- ------------------- ----- ------- ------- - --- - ----- ------------- -- ----- - ----- ------------- -- ------ - ----- ------------- -- -- --- ----- --------- - --- ------------------- ----- -------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- -------- ------ ----- -------- ----- -- - -- ---- -- -- -- --- ----- ---------------- - --- ------------------- ----- --------------- ------- - ---------- - ----- --------- ---------- -- -- ------------------------------------- -- -- --- ----- ------ - --- --------------- ------ ---------- ------------- ----------------- ---
在这个例子中,我们定义了一个 SubscriptionType
,它有一个 userAdded
字段,用于订阅用户添加事件。subscribe
函数用于订阅事件。我们使用 pubsub
对象来管理事件。
接下来,我们需要修改我们的服务器代码来支持订阅。以下是一个简单的例子:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ------------ - - ---------------- ----- - -------- --------- - - ------------------- ----- - ------------------ - - -------------------------------------- ----- --- - ---------- -------- ----------- ------------- ------- ------- --------- ----- -- -- ----- ------ - ------------------ ------------------- -- -- - ------------------- ------- -- ---- ------- --- ------------------- - -------- ---------- ------- -- - ------- ------- ----- ----------------- - -- ---
在这个例子中,我们创建了一个 HTTP 服务器,并在端口 3000 上侦听。我们还创建了一个订阅服务器,并将其与 HTTP 服务器一起启动。我们将订阅服务器的路径设置为 /subscriptions
。
现在,我们已经创建了一个支持订阅的 GraphQL 服务器,我们可以使用它来制作实时应用程序。以下是一个简单的例子:
-- -------------------- ---- ------- ----- -- - --- ----------------------------------------------- ----- ----- - - ------------ - --------- - ---- ----- - - -- ----- ------------ - ------------------------ ----- -------- -------- - ----- - ---- ---------------------- - ------- -- - ----- ---- - ------------------------------------ ----------------- -------- ---------------- --
在这个例子中,我们创建了一个 WebSocket 连接,并使用订阅查询来订阅用户添加事件。我们使用 onmessage
事件处理程序来处理服务器发送的数据。
结论
在本文中,我们介绍了如何在 Node.js 中使用 GraphQL 来制作实时应用程序。我们学习了 GraphQL 的核心概念和如何使用它来查询数据。我们还介绍了如何使用订阅来实现实时应用程序。这些知识可以帮助我们更好地理解和使用 GraphQL。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676968ee98e3e1ab1a9055fe