什么是 graphql-extended?
GraphQL-extended 是一个为 GraphQL 提供了更加强大的功能和扩展能力的 npm 包。它可以为 GraphQL 查询提供更加灵活的处理方式,同时支持自定义的 schema、resolver 和中间件。
使用 graphql-extended
安装
graphql-extended 可以通过 npm 来进行安装:
npm install graphql-extended
基本用法
首先,我们需要定义一个 GraphQL 的 schema,来描述我们的数据结构和查询方式。接下来是一个简单的例子:
-- -------------------- ---- ------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ ------ - --- ----- ---- - - ------ -- -- ------ -------- -- -------------- - - ------- ----- --
在上面的例子中,我们定义了一个查询,返回了一个单一的字符串 "Hello World!"。
接下来,我们使用 graphql-extended 来改进我们的查询方式:
-- -------------------- ---- ------- ----- ----------- - --------------------------- ----- - ---------------- - - ---------------------------- ----- - ------- ---- - - -------------------- ------------- ------- ------- ---------- ----- --------- ----- ----------- --- -- --- -------------------- ---
在上面的代码中,我们使用了 graphqlHTTP 函数来将我们的 schema 和 root 传给 graphql-extended。我们将 graphiql 属性设置为 true,以便我们可以使用 GraphiQL UI 工具测试我们的查询。
我们还创建了一个新的 GraphQLExtension 实例,并将它传递给 extensions 数组。这将为我们的 GraphQL 查询提供更加详细的信息。
使用中间件
我们可以使用 graphql-extended 提供的中间件机制,来在查询到达 resolver 之前或之后,添加额外的处理逻辑。下面是一个中间件的示例:
-- -------------------- ---- ------- ----- ----------- - --------------------------- ----- - ----------------- --------------------- ------------------- - - ---------------------------- ----- ------ - ------------- ---- ----- - ------ ------ ---------- ------- ----- - --- ----- ---- - - ------ -- -- ------ -------- ------ -- --- -- -- ---- -- ------------- ------- ---------- ----- --------- ----- ----------- -- -- --- ------------------- ----------- ---------------------- -------------------- ---
在上述代码中,我们定义了一个 items 查询,该查询接受一个 ids 参数。我们使用两个中间件,分别在查询到达 resolver 之前和之后,对参数进行处理和处理结果。
缓存结果
我们经常需要对查询结果进行缓存,以避免重复的计算。graphql-extended 提供了一个可以在 resolver 中启用缓存的方法:
-- -------------------- ---- ------- ----- ----------- - --------------------------- ----- - ---------------- - - ---------------------------- ----- --------- - ---------------------- ----- - ------- ---- - - -------------------- ----- ----- - --- ----------- ------- --- ------------ --- --- ----- -------- - -------- ----- -------- ----- -- - ----- --- - --------------------- --- ------ - --------------- -- --------- - ------ - -------------------------- ----- -------- ------ -------------- -------- - ------ ------- -- ------------- ------- ------- ---------- ----- --------- ----- ----------- --- -- --- ------------------ ------------- ---- ---- -------------- --------- ---
在上述代码中,我们定义了一个 NodeCache 实例来存储我们的查询结果。我们还定义了一个 resolver 函数,在其中检查缓存并存储结果。在 graphqlHTTP 函数中,我们将 fieldResolver 属性设置为我们的 resolver。
我们还创建了一个 GraphQLExtension 实例,并将它传递给 extensions 数组。我们启用了 cacheControl 选项,以允许 graphql-extended 自动控制查询的缓存策略。
结论
使用 graphql-extended,我们可以在 GraphQL 查询中添加更多的处理逻辑,并获得更加详细的信息。它为我们提供了方法来处理中间件、启用缓存和更灵活地定义 schema 和 resolver。希望这篇文章能帮助你更好地理解和使用 graphql-extended。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005596581e8991b448d6e32