【问题标题】:Graphql error when finding object. Can not assign null to non nullable field查找对象时出现 Graphql 错误。不能将 null 分配给不可为空的字段
【发布时间】:2022-03-02 22:17:16
【问题描述】:

我几天来一直在玩这个简单的问题,但无法弄清楚我的错误。我正在尝试从具有对象 ID 的对象数组中返回一个对象。

playground query

模式定义

type Query {
info: String
feed: [Link!]
link(id: String!): Link
}

type Mutation {
post(url: String!, description: String!): Link!
updateLink(id: ID!, url: String!, description: String!): Link!
deleteLink(id: ID!): Link!
}

type Link {
id: ID!
description: String!
url: String!
}

index.js

const { GraphQLServer } = require('graphql-yoga');

let links = [{
id: 'link-0',
url: 'www.howtographql.com',
description: 'Fullstack tutorial for GraphQL',
author: 'sam roehrich'
}]

let idCount = links.length

const resolvers = {
Query: {
info: () => `This is the API of a Hackernews Clone`,
feed: () => links,
link: (parent, {id}) => {
  return links.filter(link => {
    link.id === id
  })
}
}

【问题讨论】:

  • 根据它的类型,你的字段应该返回一个对象,但是你的解析器返回的是一个对象数组。见Common Scenario #2

标签: graphql-js


【解决方案1】:

过滤器返回一个满足给定条件的新列表,因此您返回的列表不是列表中的项目(对象)

【讨论】:

    【解决方案2】:

    聚会迟到了,但我想我会为处于类似情况的其他人明确回答这个问题。

    cmets 中的 Daniel Rearden 是对的。基本上,问题在于 filter() 函数返回一个数组而不是一个 Object。 解决这个问题的一个简单方法是在解析器中返回数组的第一个(也是唯一一个)项:

    const link = links.filter(link => {
        link.id === id
    })
    // Return only the first link from the array.
    return link[0];
    

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 2019-05-28
      • 2019-08-06
      • 2021-10-07
      • 2019-10-25
      • 2021-03-18
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多