1

查询时出现此错误:

"Cannot return null for non-nullable field Transaction.createdAt."

这是查询:

query getMyTransactions {
  getMyTransactions {
    id
    createdAt
  }
}

此查询的架构是:

extend type Transaction @key(fields: "id") {
  id: ID! @external
}

type Query {
  getMyTransactions: [Transaction!]!
}

另一个模式具有Transaction类型:

type Transaction @key(fields: "id") {
  id: ID!
  createdAt: String!
}

有什么问题?

编辑:如果我查询:

getMyTransactions {
  id
}

工作正常,我得到了所有id的查询,但如果我包含另一个属性,查询会失败。

4

1 回答 1

0

简而言之-您createdAt将 type 声明为non-nullvalue,但数据中的某处createdAtnull.

createdAt: String!

!在类型名称之后。这意味着我们的服务器总是希望为这个字段返回一个非空值,如果它最终得到一个空值,实际上会触发一个 GraphQL 执行错误,让客户端知道出现了问题。GraphQl 文档

例子

对于此远程/本地数据(第一个对象中createdAt 缺少):

const Transaction = [
  {
    id: "1",
    /* createdAt: "01/09/2020" */ /* missing from the data */
  },
  {
    id: "2",
    createdAt: "02/09/2020"
  }
];

执行查询

query{
  getMyTransactions {
    id
    createdAt
    }
}

抛出错误:

"message": "不能为不可为空的字段 Transaction.createdAt 返回 null。 ",

在此处输入图像描述

要解决这个问题:

  • 选项 1:添加一些解析器逻辑和/或添加与所需数据相关的验证。
  • 选项 2:createdAtnull允许返回)中删除要求: 在此处输入图像描述
于 2020-09-01T23:01:01.877 回答