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

时间:2017-01-18 13:18:21

标签: graphql graphql-js

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

让我们说API用户发送一个查询并且数据库服务器已关闭,我想将此信息作为错误返回到

data { errors }

列表。

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

我想知道的另一件事是如何向数据对象添加一个附加消息对象。

假设用户已通过id(例如特定帐户)请求了数据库项,并且该项不存在。现在,我想回复这样的事情:

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

我该怎么做?我还必须将消息定义为类型吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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附加errorshttps://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L309)的行。您可以使用不同的密钥执行相同操作。

祝你好运!