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