介绍
@cortexql/loader
是一个用于加载 CortexQL 文件的 npm 包。CortexQL 是一个用于编写 GraphQL schema 的领域特定语言 (DSL)。使用 @cortexql/loader
可以在 Node.js 中方便地加载 CortexQL 文件,并将其转化为一个 GraphQL schema 对象。
安装
npm install @cortexql/loader
使用
加载 CortexQL 文件
@cortexql/loader
提供了 loadSchema()
方法用于加载 CortexQL 文件。
const { loadSchema } = require('@cortexql/loader'); const schema = loadSchema('./schema.cql');
上述代码会加载名为 schema.cql
的文件,并将其转化为一个 GraphQL schema 对象。注意,loadSchema()
方法接收的参数是一个基于 CWD(当前工作目录)的相对路径。
加载多个 CortexQL 文件
如果要加载多个 CortexQL 文件,可以使用 mergeSchemas()
方法。
const { mergeSchemas } = require('@cortexql/loader'); const schema = mergeSchemas([ './schema1.cql', './schema2.cql', './schema3.cql', ]);
上述代码会将名为 schema1.cql
、schema2.cql
、schema3.cql
的文件全部加载并合并成一个 GraphQL schema 对象。
使用指令扩展 GraphQL schema
CortexQL 支持使用指令扩展 GraphQL schema。例如,在 CortexQL 文件中使用以下指令可以在 schema 中增加一个类型和一个字段:
type SomeType @isAuthenticated { someField: String }
这里的 @isAuthenticated
就是一个指令,会在 schema 中增加一个名为 isAuthenticated
的自定义指令。如果要支持这种指令扩展,需要传入一个 directiveMap
参数:
-- -------------------- ---- ------- ----- - ---------- - - ---------------------------- ----- ------ - -------------------------- - ------------- - ---------------- ------ ------- ----- -------- -- - -- --------------- ----- --------------- - ----- -- ------------------ - ----- --- ------------- - -- ---------- ------ ------------ ----- --------- -- -- ---
上述代码会将 isAuthenticated
指令映射到一个自定义解析器函数中,该函数可以根据业务逻辑判断用户是否已认证,如果未认证,则抛出一个 Error
错误。
使用 resolver 扩展 GraphQL schema
除了使用指令外,CortexQL 还支持使用 resolver 扩展 GraphQL schema。例如,在 CortexQL 文件中可以定义以下字段:
type Query { currentUser: User }
这里的 currentUser
字段需要调用一个外部接口来获取用户信息,可以定义一个 resolver 函数来实现:
-- -------------------- ---- ------- ----- - ---------- - - ---------------------------- ----- ------ - -------------------------- - ------------ - ------ - ------------ -------- ----- -------- -- - -- ------------ ------ ------------------------- -------------- -- ---------------- ---------- -- ----------- -- -- -- ---
上述代码会将 Query
类型中的 currentUser
字段映射到一个自定义 resolver 函数中,该函数会调用外部接口返回用户信息。
总结
@cortexql/loader
可以方便地加载 CortexQL 文件,并将其转化为 GraphQL schema 对象。通过使用指令和 resolver,可以在 CortexQL 文件中扩展 GraphQL schema,并实现复杂业务逻辑。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065b44c6eb7e50355dbe70