我在概念上坚持使用graphql(使用graphql-js) .
让我们说API用户发送一个查询,数据库服务器已关闭,我想将此信息作为错误返回到
data { errors }
名单 .
如何访问数据中的错误对象并在那里推送我自己的错误消息(例如关于数据库服务器中断)?
我想知道的另一件事是如何向数据对象添加一个附加消息对象 .
假设用户已经通过id(例如特定帐户)请求了数据库项,并且该项不存在 . 现在,我想回复这样的事情:
{
data: {
messages: [{status: "failure", message: "This account does not exist"}]
}
}
我该怎么做?我还必须将消息定义为一种类型吗?
2 回答
使
errors
和messages
字段出现在GraphQL响应的data
属性内的唯一方法是将它们包含在GraphQL模式的类型系统中,并从客户端明确询问它们 . 但是,如果您希望每个请求都返回一个自定义的errors
和messages
字段,无论客户端是否要求它们,您都可以将它们包含在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)的行 . 您可以使用不同的密钥执行相同的操作 .祝你好运!
将
errors
和messages
作为查询结果的一部分的一种方法是将它们作为GraphQL对象类型的字段包含在内 .例如,您有一个GraphQL对象类型
Item
,其中包含字段ID,名称,错误和消息 . 数据库服务器关闭时,仅填充项目实例的errors
字段 . 当具有给定ID的项目不可用时,将填充messages
字段 . 当项目可用时,将设置名称字段 .