前言
GraphQL 是一种用于构建 API 的语言,它将 API 定义为类型和字段的集合,而不是固定的端点。GraphQL 的主要优势之一是它允许客户端按需获取所需的数据,而不是返回整个响应。
然而,当我们编写 GraphQL API 时,我们需要验证输入参数并处理错误。要解决这个问题,我们可以使用中间件函数。在这篇文章中,我们将介绍一个 npm 包叫做 graphql-middleware-typed-arguments,它提供了一种轻松处理 GraphQL 输入参数的方法。
什么是 graphql-middleware-typed-arguments?
graphql-middleware-typed-arguments 是一个 GraphQL 中间件,它可以在参数解析过程中自动检查参数的类型,验证参数是否存在,并处理错误。此外,该中间件还提供了可以快速生成 TypeScript 类型的工具函数。
如何使用 graphql-middleware-typed-arguments?
在使用 graphql-middleware-typed-arguments 之前,我们需要先安装和配置 GraphQL。
安装
在项目目录下使用 npm 安装 graphql-middleware-typed-arguments。
--- ------- ----------------------------------
配置
在我们的 GraphQL 服务中,我们需要使用 graphql-middleware-typed-arguments 包装我们的解析器。下面是使用 GraphQL.js 的示例:
----- - --------------------- --------------------------- - - ------------------------- ----- - --------------- - - ------------------------------ ----- - ----------- - - ---------------------------------------------- ----- -------- - - ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------ - -- ----- --------- - - ------ - ----- --- - -- -- -- - -- ---- ---- -- -- -- -- -- -- ------ ------ ---- -------- --- --------- ----- ------ - ---------------------- --------- --------- --- -- ---- --- -------- ---- --- ---------- ----------------------------- ------- ----------------- - ------ - ----- ---------------- ------------- --- - ----- ------ ------------ ---- -- -- --- ------ -- --- --- - -- -- -- - -- ---- -------- ---- ---- --- -- -- ---- - ----- ---- -- ---------- - ---- -------- ----- ---- -- -------- -- --- ------ -- -- -- -- ---
在上面的示例代码中,我们首先定义了一个 GraphQL schema。然后,我们在 resolver 函数中使用中间件包装器 applyMiddleware。我们将 typedFields 函数作为第一个参数传递给 applyMiddleware。该函数是 graphql-middleware-typed-arguments 提供的。接下来的参数是我们的 resolver 函数。
在这个例子中,我们定义了一个 user 查询,它需要一个 ID 类型的参数。我们使用 typedFields 函数检查传入的参数是否正确,并对传入参数进行处理。
------------- --- - ----- ------ ------------ ---- -- -- --- ------ -- --
中间件使用示例
下面,让我们看一个更复杂的例子来演示 graphql-middleware-typed-arguments 的使用。
示例代码
----- - --------------------- --------------------------- - - ------------------------- ----- - --------------- - - ------------------------------ ----- - ------------ ----------------- ------------------- - - ---------------------------------------------- ----- -------- - - ---- ----- - -------- ---- ----- -------- ------ --------- ----- - ---- -------- - ----------------- ------------ ----- - ----- --------- - ----- ------- ------ ------- - ---- ---- - --- --- ----- ------ ------ ------ - -- ----- --------- - - ------ - ----- ---------------- ------------- --- - ----- ------ ------------ ---- -- -- --- ------ -- ----- - ----- ---------- ------------ ---- ---- -- --- ------ -- ------ - ----- ---------- ------------ ---- ----- -- --- ------ -- --- --- - --- ----- ----- -- -- - -- ---- -------- ---- ---- --- -- -- ---- ----- ----- ------ --- ------- -- ---------- - ---- -------- ----- ---- -- -------- -- --- ------ -- -- -- --------- - ----------- ---------------- ------------- ------ - ----- ------------- ------------ ---- ----- ------ --- -------- - ------ -- ------------- - ----- ---------- ------------ ---- ---- -- --- ------ -- -------------- - ----- ---------- ------------ ---- ----- -- --- ------ -- --- --- - ------ - ----- ----- - -- -- - -- ---- -------- ---- ---- --- -- ------ --- ------- --- ------- -- ------- -- ---------- - ---- -------- ----- ---- -- -------- -- --- ------ -- -- -- -- ----- ------ - ---------------------- --------- --------- --- ----------------------------- ------- ----------------- - ------ - ----- ---------------- ------------- --- - ----- ------ ------------ ---- -- -- --- ------ -- ----- - ----- ---------- ------------ ---- ---- -- --- ------ -- ------ - ----- ---------- ------------ ---- ----- -- --- ------ -- --- --- - --- ----- ----- -- -- - -- ---- -------- ---- ---- --- -- -- ---- ----- ----- ------ --- ------- -- ---------- - ---- -------- ----- ---- -- -------- -- --- ------ -- -- -- --------- - ----------- ---------------- ------------- ------ - ----- ------------- ------------ ---- ----- ------ --- -------- - ------ -- ------------- - ----- ---------- ------------ ---- ---- -- --- ------ -- -------------- - ----- ---------- ------------ ---- ----- -- --- ------ -- --- --- - ------ - ----- ----- - -- -- - -- ---- -------- ---- ---- --- -- ------ --- ------- --- ------- -- ------- -- ---------- - ---- -------- ----- ---- -- -------- -- --- ------ -- -- -- -- ---
在上面的代码中,我们定义了一个包含 user 和 createUser 两个操作的 GraphQL schema。
user 操作需要 id、name 和 email 参数。我们在 resolver 函数中使用 applyMiddleware 函数将 typedFields 中间件包装在 resolver 上。如果在客户端传递的参数不符合上述定义,将会抛出 TypedFieldsError 或 MissingFieldsError 错误。
createUser 操作需要 input 参数,并且该参数包含 name 和 email 字段。在 resolver 函数中,我们除了检查 input 这个参数外还需要检查输入的参数 name 和 email。
总结
使用中间件是处理 GraphQL 输入参数的一个非常方便的方法。graphql-middleware-typed-arguments 是一个辅助我们处理 GraphQL 输入参数的 npm 包,它能更好地解决参数验证和错误处理的问题。在应用 GraphQL 开发时,我们应该考虑使用此中间件来增加服务的健壮性,避免出现参数错误等问题,提高项目开发的效率和质量。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066b5751ab1864dac66dc2