npm 包 graphql-factory-subscription 使用教程

阅读时长 14 分钟读完

GraphQL 是一种新的数据查询语言,它的前端应用广泛,因为它可以在一个请求中获取所需的数据,而不是多次请求。GraphQL 的标准使用语言是 JavaScript,因此面向前端的 npm 库使用 GraphQL 非常方便。

本文介绍的 npm 包 graphql-factory-subscription 是一个用来方便地管理 GraphQL 订阅的库。本文将深入介绍这个库的使用,并附有详细的指导意义和示例代码。

graphql-factory-subscription

graphql-factory-subscription 是一个用来管理 GraphQL 订阅的 npm 库。它提供了一种声明式的方式来定义 GraphQL 订阅服务器,并使订阅管理变得容易。

graphql-factory-subscription 允许你:

  • 在服务器上定义订阅
  • 按类型过滤订阅
  • 接收订阅更新通知
  • 终止订阅

graphql-factory-subscription 实现了 GraphQL subscriptions spec。它还支持 UMD 和 ES6 模块。

现在,让我们来看看怎么使用它!

安装

首先,你需要安装 graphql-factory-subscription npm 包:

用法

接下来,我们将详细介绍如何使用 graphql-factory-subscription

1. 初始化 SubscriptionManager

SubscriptionManagergraphql-factory-subscription 的核心。它是用来管理 GraphQL 订阅的对象。要初始化 SubscriptionManager,你需要传递一个包含以下字段的对象:

  • schema: 一个 GraphQLSchema 对象
  • pubsub: 一个实现了 publish 方法的 PubSub 对象
  • setupFunctions: 用来设置订阅服务器的可选函数

这里有一个简单的示例:

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

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

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

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

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

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

2. 定义订阅类型

一旦你初始化了 SubscriptionManager,你就可以添加订阅类型了。你可以使用 SubscriptionManager 对象的 addSubscriptionType 方法向订阅管理器添加订阅。addSubscriptionType 方法需要一个包含以下字段的对象:

  • subscription: 用于订阅的 GraphQL 查询类型
  • resolver: 用于处理订阅的函数
  • filter: 用于过滤订阅的函数

这里有一个 addSubscriptionType 的例子:

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

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

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

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

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

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

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

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

3. 订阅更新

现在,我们已经定义了订阅,让我们来订阅它们。你可以使用 SubscriptionManager 对象的 subscribe 方法订阅一个订阅类型。subscribe 方法需要一个包含以下字段的对象:

  • query: 订阅的 GraphQL 查询字符串
  • variables: 订阅查询所需的变量
  • context: 一个包含 pubsub 属性的上下文对象

这里有一个 subscribe 的例子:

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

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

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

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

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

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

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

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

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

4. 终止订阅

你可以使用 SubscriptionManager 对象返回的订阅句柄来终止订阅。SubscriptionManager 对象的 subscribe 方法返回一个带有 unsubscribe 方法的对象。你可以调用 unsubscribe 方法来终止订阅。

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

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

5. 按类型过滤订阅

SubscriptionManager 对象的 addFilter 方法可以让你按类型过滤订阅。addFilter 方法需要一个包含以下字段的对象:

  • type: 订阅类型名称
  • filter: 用于过滤订阅的函数

这里有一个 addFilter 的例子:

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

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

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

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

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

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

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

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

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

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

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

结论

现在,你已经了解了如何使用 graphql-factory-subscription npm 包来管理 GraphQL 订阅。本文提供了详细的指导意义和示例代码,可供参考和学习。希望你可以根据这些指南和示例,更好地管理 GraphQL 订阅。

如果你想深入了解 graphql-factory-subscription 的更多细节,请查看官方文档 graphql-factory-subscription GitHub page

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

纠错
反馈