npm 包 @cortexql/loader 使用教程

阅读时长 5 分钟读完

介绍

@cortexql/loader 是一个用于加载 CortexQL 文件的 npm 包。CortexQL 是一个用于编写 GraphQL schema 的领域特定语言 (DSL)。使用 @cortexql/loader 可以在 Node.js 中方便地加载 CortexQL 文件,并将其转化为一个 GraphQL schema 对象。

安装

使用

加载 CortexQL 文件

@cortexql/loader 提供了 loadSchema() 方法用于加载 CortexQL 文件。

上述代码会加载名为 schema.cql 的文件,并将其转化为一个 GraphQL schema 对象。注意,loadSchema() 方法接收的参数是一个基于 CWD(当前工作目录)的相对路径。

加载多个 CortexQL 文件

如果要加载多个 CortexQL 文件,可以使用 mergeSchemas() 方法。

上述代码会将名为 schema1.cqlschema2.cqlschema3.cql 的文件全部加载并合并成一个 GraphQL schema 对象。

使用指令扩展 GraphQL schema

CortexQL 支持使用指令扩展 GraphQL schema。例如,在 CortexQL 文件中使用以下指令可以在 schema 中增加一个类型和一个字段:

这里的 @isAuthenticated 就是一个指令,会在 schema 中增加一个名为 isAuthenticated 的自定义指令。如果要支持这种指令扩展,需要传入一个 directiveMap 参数:

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

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

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

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

上述代码会将 isAuthenticated 指令映射到一个自定义解析器函数中,该函数可以根据业务逻辑判断用户是否已认证,如果未认证,则抛出一个 Error 错误。

使用 resolver 扩展 GraphQL schema

除了使用指令外,CortexQL 还支持使用 resolver 扩展 GraphQL schema。例如,在 CortexQL 文件中可以定义以下字段:

这里的 currentUser 字段需要调用一个外部接口来获取用户信息,可以定义一个 resolver 函数来实现:

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

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

上述代码会将 Query 类型中的 currentUser 字段映射到一个自定义 resolver 函数中,该函数会调用外部接口返回用户信息。

总结

@cortexql/loader 可以方便地加载 CortexQL 文件,并将其转化为 GraphQL schema 对象。通过使用指令和 resolver,可以在 CortexQL 文件中扩展 GraphQL schema,并实现复杂业务逻辑。

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

纠错
反馈