graphql-js 中的 graphql 错误和状态消息

graphql errors and status messages in graphql-js

我在概念上坚持使用 graphsql(使用 graphql-js)。

假设 API 用户发送了一个查询,而数据库服务器已关闭,我想 return 此信息作为

中的错误
data { errors }

列表。

我如何访问数据中的错误对象并将我自己的错误消息(例如关于数据库服务器中断)推送到那里?

接下来我想知道的是如何向数据对象添加附加消息对象。

假设用户已通过 ID(例如特定帐户)请求数据库项目,但该项目不存在。现在,我想 return 像这样:

{
    data: {
        messages: [{status: "failure", message: "This account does not exist"}]
    }
}

我该怎么做,我是否必须将消息也定义为一种类型?

errorsmessages 作为查询结果的一部分的一种方法是将它们作为字段包含在您的 GraphQL 对象类型中。

例如,您有一个 GraphQL 对象类型 Item,其中包含字段 id、名称、错误和消息。当数据库服务器关闭时,仅填充项目实例的 errors 字段。当具有给定 ID 的项目不可用时,将填充 messages 字段。当项目可用时,设置名称字段。

errorsmessages 字段出现在 GraphQL 响应的 data 属性 中的唯一方法是将它们包含在类型系统中你的 GraphQL 模式,并明确地从客户端请求它们。但是,如果您希望在每次请求时都返回自定义 errorsmessages 字段,而不管客户是否要求它们,您可以将它们包含在 data 属性.

例如,如果您使用 express-graphql,它会提供一个扩展选项,允许您将任何多余的信息附加到每个响应负载 (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L95)

如果您没有使用 express-graphql,您可以将其视为如何在每个响应中包含您自己的元数据的示例。 express-graphql 是一个非常简单的包装器,您始终可以将自己的数据写入响应中。例如,这是 express-graphql 附加 errors (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L309) 的行。您可以执行相同的操作,但使用不同的密钥。

祝你好运!