【问题标题】:graphql errors and status messages in graphql-jsgraphql-js 中的 graphql 错误和状态消息
【发布时间】:2017-06-02 21:30:04
【问题描述】:

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

假设 API 用户发送查询并且数据库服务器已关闭,我想将此信息作为错误返回

data { errors }

列表。

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

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

假设用户通过 id 请求了一个数据库项目(例如,一个特定的帐户)并且该项目不存在。现在,我想返回如下内容:

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

我将如何做到这一点,我是否必须将消息也定义为一种类型?

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    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) 的行。您可以使用不同的键执行相同操作。

    祝你好运!

    【讨论】:

    • 其实我用的是express-graphql,所以你的回答肯定很有用。感谢您甚至指向各自的源代码行。我喜欢这样。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,但是为了使它们可供客户端使用,客户端必须在查询中明确请求它们。如果我错了,请纠正我。
    • 是的,客户得到了它想要的。
    猜你喜欢
    • 2019-06-30
    • 2020-09-08
    • 2018-10-27
    • 2018-01-16
    • 1970-01-01
    • 2018-05-31
    • 2019-01-11
    • 2020-06-12
    • 2019-06-28
    相关资源
    最近更新 更多