GraphQL 是近年来备受前端开发者热爱的一种 API 开发模式,它可以提供更精准的数据返回,便于客户端处理。在使用 GraphQL 的过程中,我们需要写很多中间件处理数据和逻辑,而这时候就需要使用一个优秀的 npm 包来简化工作流程。本文将介绍如何使用 npm 包 @nicolasparada/graphql-middleware,帮助您更好地开发 GraphQL API。
安装
在使用 @nicolasparada/graphql-middleware 需要先安装该包,可以使用 npm 命令进行安装:
npm install @nicolasparada/graphql-middleware
使用
在使用 @nicolasparada/graphql-middleware 之前,我们需要先了解一下 GraphQL 的请求与响应过程。GraphQL 服务端会先接到客户端的请求,然后利用 resolvers 处理请求,最终返回给客户端。在这个过程中,我们需要编写很多的中间件处理对应的请求,比如鉴权等等。这就是 @nicolasparada/graphql-middleware 的用处。
1. 在函数式 resolvers 中使用
首先,我们需要在 resolvers 里面添加一个前置中间件。这可以通过 createMiddleware 类方法实现:
import { createMiddleware } from '@nicolasparada/graphql-middleware'; const logMidware = createMiddleware( async (resolve, parent, args, context, info) => { console.log(`[${info.operation.operation}]: ${info.fieldName}`); return resolve(parent, args, context, info); }, );
上面的中间件是一个用于在每个解析后单独 console.log
的示例。现在我们已经创建好我们的 middleware,下一步是将其添加到我们的 resolvers 中。这可以通过 mergeMiddleware
函数实现:
-- -------------------- ---- ------- ------ - --------------- - ---- ------------------------------------ ----- --------- - - ------ - ------ ----------------------------- ----- -------- ----- -------- ----- -- - ------ ------- --------------- --- -- -- ------ ------- ----------
在上述代码中,我们通过 mergeMiddleware
将我们的 logMidware
绑定到 hello
查询上,这样每次执行查询都会输出一些请求相关的日志数据。
到目前为止,只有一个简单的中间件。在实际中,中间件可以是复杂的流程,例如用户鉴权和批量查询等等。
2. 在 Apollo Server 中使用
express-graphql
是一个可以帮助我们快速创建并使用 GraphQL 服务的 npm 包,它支持使用解析函数来处理客户端请求。这使得我们可以使用 GraphQL 服务的完全功能,同时可以指定在解析函数执行时调用的特定中间件。
-- -------------------- ---- ------- ------ ------- ---- ---------- ------ - ------------ - ---- ------------------------ ------ - --------------- - ---- --------------------- ------ --------- ---- -------------- ------ -------- ---- ----------- ----- --- - ---------- ----- ------ - --- -------------- --------- ---------- --------------------------- --- ------------------------ --- --- ------------ ----- ---- -- -- -- ------------ --- ------ ----- -- -------------------------------------------- -- --
在上述代码中,我们通过 graphql-middleware
中的实用函数 applyMiddleware()
对所有 resolvers 应用中间件。这将代替 Vanilla GraphQL 解析函数,使我们在查询时能够看到中间件执行的结果。
3. 扩展功能
为了扩展功能,您可以使用 createModel
和 mergeModels
来集中管理功能。这些函数使我们能够更深入地访问中间件、无状态解决方案和其他更复杂的逻辑。
-- -------------------- ---- ------- ------ - ----------- - ---- ------------------------------------ ----- -------------------- - ----------------- ----- --------- ------- ----- -------- ----- -- - ----- ---- - --------------------- --- ----- --------- - -------- ----- -------- - -------- ------ --------- ---------- ---------- -------- -- --- -------- ------ -- -- ----- ------------ - ----------------- ----- --------- ------- ----- -------- ----- -- - ----- - ---------- -------- - - ------- ------ ------- ------------ -------------- -- -- ----- --------- - ------------- ----- ------- ------------ ---------------------- -------------- --------- ----- --- ----- -------- ----- -- - ------ - --------- ------------- -- -- --- ------ ------- ----------
在上述代码中,我们使用 createModel
函数创建一个带有两个中间件的模型。第一个中间件是一个简单的字符串解析器,用于解析完整名称并将其拆分为名和姓。第二个中间件作为最终的解析器解析返回的名和姓。
总结
@nicolasparada/graphql-middleware 是一个非常优秀的 npm 包,可以很好的帮助我们处理 GraphQL 开发中的中间件问题。通过实际的示例代码,相信您对该包的使用方式已经有了深刻的了解。当您需要对 GraphQL 服务的逻辑进行处理时,请不要犹豫使用该包。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600558a081e8991b448d5ed3