当前位置: 首页 > 知识库问答 >
问题:

如何在GraphQL中返回对象或null?

程淮晨
2023-03-14

我有以下模式:

type User {
    email: String!,
    user_id: String!,
    img: String!,
},

type Query {
    getUser(user_id: String!): User
}

模式反映了一个事实,即我必须返回一个User对象。然而,我不能总是这样做,有时我需要返回null。例如,如果我向数据库发出请求,它将返回return object或null(如果找不到用户)。

在我的GraphQL模式中,我为特定字段设置了类型。如果我试图返回一个不同于我设置的类型,我会得到一个错误。如何允许字段返回对象或null?

共有2个答案

燕扬
2023-03-14

根据Graphql获取完整的子对象,如果不存在,则为null,当您从GraphQL函数返回空对象(即{})而不是null时,您将获得所描述的错误。

我也有类似的问题:我一直在GraphQL响应中得到“错误:缺少需要字段”的错误,直到我确定我实际上返回的是空对象,而不是空对象

樊运乾
2023-03-14

根据规范:

默认情况下,GraphQL中的所有类型都可以为空;空值是上述所有类型的有效响应。要声明不允许null的类型,可以使用GraphQL Non-null类型。

换句话说,GraphQL中的类型默认为空。所以像这样的领域

getUser: User

可以返回用户对象或null。田野

name: String

可以返回字符串或null。只有通过显式地将字段指定为非null(在SDL中,通过向类型添加),我们才能指定字段永远不应返回null。例如:

name: String!

还需要注意的是,解析程序中返回的promise必须解析为nullundefined,才能强制为null值。换句话说,如果返回空对象({})、空数组([])或其他值,GraphQL会将其视为返回对象而不是空值!

在您的模式中,用户的电子邮件字段是字符串 ,这意味着它不能解析为null。如果您运行以下查询:

query {
  getUser(user_id: "1") {
    email
  }
}

getUser的解析程序返回一个空对象({}),GraphQL将尝试解析email,为其返回null,并放大,因为email不应为null!但是,如果getUser解析为null,则所有子字段都不会被解析,并且不会出现任何错误。

 类似资料:
  • 问题内容: 我想使用经典的ASP脚本返回JSON对象(这是AJAX请求的一部分)。 如果我仅以以下形式发送回复: 这将工作,还是我实际上需要JSON库? 编辑: 我正在尝试在http://www.devbridge.com/projects/autocomplete/jquery/#howto上获取自动完成插件。 javascript: ASP: 自动完成功能不起作用。如果我使用像查找这样的本地查

  • 问题内容: 我正在尝试从call()返回2D数组,但遇到了一些问题。到目前为止,我的代码是: 这段代码会编译,这不会返回我的数组。我确定我可能使用了错误的语法,但是找不到任何好的示例。 编辑:改变了一点 问题答案: 添加到Joseph Ottinger的答案中,要传递要在Callable的call()方法中使用的值,可以使用闭包:

  • 以下模式在可选对象中包含非空字段(整个对象允许为空)。它定义了一个父对象的列表,这些父对象具有可选字段“孩子”——一些父对象允许具有空“孩子”。 以下GraphQL查询返回预期的父对象列表(其中一些具有null子值)。但它也返回附加到结果的错误。这是GraphQL(孩子是可选的)中的错误吗?还是预期行为?

  • 我是Java开发人员,正在尝试解决一个简单的C++任务。在Java中,如果我想返回一个空的/空的对象,为了表示没有找到该对象,我只需要返回null。示例: 在C++中,我有以下方法 似乎如果我声明了一个像上面这样的方法,返回NULL不是一个选项,因为该方法不返回指针,而是一个类。那么我返回什么来表示没有找到人呢?

  • 我正在使用一个双端队列(java.util.Dequeue),希望在队列中找到一个对象并返回它。 我目前正在使用方法检查队列是否包含对象,但不知道如何获取找到的对象的实际实例。正在搜索的实例不是同一个实例,因为我正在重写方法来测试类变量子集的相等性。 如果不可能使用退出来做到这一点,那么我应该用什么来代替呢?我需要将对象推送到列表的两端,并从一开始就将其删除。显然能够搜索一个对象并得到它的实例化。

  • 问题内容: 我是Java开发人员,正在学习Go。我正在为LIFO堆栈编写简单的“ pop”操作。问题是堆栈中没有值时的返回值。在Java中,我可以在肯定的情况下返回wrapper(Integer),并且在没有值的情况下返回null。从我的角度来看这很自然。 如何在Go中做类似的事情?是否有用于原语的结构包装器?我是否需要返回两个值(第二个将指示错误代码)?还是我需要抛出异常? 现在是这样的: 是好