GraphQL:返回带有不可为空的id字段的类型作为查询结果

时间:2018-07-11 13:45:49

标签: graphql graphcool

我有这种类型:

  type Profile {
    id: ID! @isUnique
    email: String! @isUnique
    ...
  }

和查询:

profile(email: String!):Profile

当我以不存在的用户身份运行查询时,我的基础解析器返回null,并且我期望GraphQL像这样。

但是,我收到此错误:

Cannot return null for non-nullable field Profile.id.

发生这种情况是因为期望查询返回一个Profile,并且一个Profile必须具有id字段。

但是,查询的返回类型不是不可为空的Profile!,而是Profile,这意味着查询可能不返回任何内容。

如何正确解决此问题?

2 个答案:

答案 0 :(得分:0)

尝试在个人资料查询解析器中返回export const hideServerErrors = () => ({ type: HIDE_SERVER_ERRORS, }); 。如果返回类似空对象的内容,则配置文件解析器将对此进行选择,并尝试将null返回为undefined,正如您指出的那样,这是一个模式错误。

尝试这样的事情:

Profile.id

您的graphQL响应将如下所示

const queryProfileResolver = (_, { email }) => {
  // getProfileByEmail should return null if no match is found
  return getProfileByEmail(email)
}

答案 1 :(得分:0)

首先,您需要删除数据库并使用 types.graphql原样

type Profile {
    id: ID! @isUnique
    email: String! @isUnique 
    ...
  }

部署它,错误就会消失。

发生这种情况的主要原因是您已经部署了不为null的数据,因此无法更改,您需要删除我们的数据库,就是这样