前言
GraphQL 是一种新的数据接口语言,相比于传统的 RESTful 接口更为灵活和可定制。同时,GraphQL 也提供了实时数据更新的能力。express-graphql-subscriptions
是一款通过将 GraphQL 和 WebSocket 相结合来提供实时数据更新的 npm 包。在这篇文章中,我们将学习如何使用它。
安装
首先,我们需要在我们的项目中安装 express-graphql-subscriptions
包。可以使用 npm 来完成安装:
npm install express-graphql-subscriptions
配置
为了使用 express-graphql-subscriptions
,我们需要将它与 GraphQL Server 和 WebSocket 结合使用。下面是一个简单的例子:
-- -------------------- ---- ------- ----- - ------------ - - ---------------- ----- ------- - ------------------- ----- - -------- --------- - - ------------------- ----- - ------------- - - ------------------- ----- - ------------------ - - -------------------------------------- ----- - -------------------- - - ------------------------- ----- - ------ - - --------------------------------- ----- - --------------- --------------- - - --------------------------------- ----- - ------------------- - - --------------------------------- ----- --------------- - -------------------- ----- ---- - ----- ----- --- - ---------- ----- ------ - --- --------- ----- ------ - ---------------------- --------- ---------------- --- ----- ------------------- - --- --------------------- ------- ------- -- ------------- --- -- ------- --- -------- ----------- ---------------- ------- -------------------- -- -- -- ------- ----- -------------------- ----------------- ------------ ---------- ---- -- --------- --- ----- ------ - ------------------ ------------------- -- -- - --- ------------------- - -------- ---------- ------- ---------- -- -- ------------------- ------------- ------------- -- -- ------------------- ---------------- -- - ------- ----- ----------------- - -- ------------ -------- ------ -- --- ------- -- --------------------------------- -- ---
需要注意的是,subscriptionManager
和 createSubscriptionServer
均需要使用的是 PubSub
对象。
同时,需要注意 SubscriptionManager
的自定义配置,包括 setupFunctions
和 onOperation
。这些内容超出本文的讨论范围,可以参考官方文档。
使用
在我们的 GraphQL schema 中,我们可以定义一些 subscription 类型,例如:
type Subscription { postAdded: Post! }
这个 subscription 类型指定了,当博客文章被添加时我们将会得到一个 Post
类型的订阅消息。
在我们的 mutation 中,我们可以向服务器发送实时消息,例如:
type Mutation { addPost(title: String!, content: String!): Post! }
在我们的 resolver 中,可以使用 pubsub.publish
方法来向 WebSocket Server 发送消息。例如:
pubsub.publish("postAdded", { postAdded: post }); return post;
在客户端,我们可以使用 subscriptions-transport-ws
以及 Apollo Client 来链接 WebSocket Server,并接收实时消息,例如:
-- -------------------- ---- ------- ------ - ------------------ - ---- ----------------------------- ------ - ------------ - ---- ---------------- ------ - ------------- - ---- ----------------- ------ - ------------- - ---- ------------------------ ----- ---------------- - ------------------------------------ ----- ------------------ - --- ------------------------------------ - ---------- ----- --- ----- ------ - --- ---------------------------------- ----- ------ - --- -------------- ----- ------- ------ --- ---------------- --- ----- ----- - ---- ------------ - --------- - ----- ------- - - -- ------------------ ----- -------------- ------ ---- -- - ---------------------------- -- ---
结论
通过使用 express-graphql-subscriptions
,我们可以在我们的 GraphQL Server 中添加实时更新功能,这提高了我们应用程序的实时性和交互性,从而为用户提供更好的体验。虽然本文只是简单介绍了如何使用 express-graphql-subscriptions
,但是相信经过学习,您已经可以愉快的使用它了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f7d238a385564ab6a71